O contrato
Uma ação define transform(text). O que devolver é convertido em texto e inserido onde está a escrever.
def transform(text):
return text.upper()Devolva None para não inserir nada. Para uma experiência rápida, atribua uma variável result no nível principal em vez de definir uma função.
De onde vem o texto
| Entrada | O que a ação recebe |
|---|---|
| Nada | Gera texto do zero. transform(""). |
| Palavra atual | Passa a palavra que estás a escrever para transform(text). |
| Seleção | Passa o texto selecionado, ou nada se não houver seleção. |
| Linha atual | Passa a linha onde está o cursor. |
| Frase atual | Passa a frase onde está o cursor. |
| Texto antes do cursor | Passa tudo o que está antes do cursor. |
| Texto depois do cursor | Passa tudo o que vem depois do cursor. |
| Todo o campo | Passa o campo inteiro, dos dois lados do cursor. |
| Área de transferência | Passa o texto da área de transferência. Requer acesso total. |
Substituir a entrada decide se a saída toma o lugar do que entrou. Aplica-se a todas as fontes que leem o campo. Nada e Área de transferência não têm nada para substituir no documento, por isso a sua saída é sempre inserida.
def transform(text):
words = len(text.split())
return f"{words} words"Pedir ao teclado
Uma ação pode usar os mesmos comandos de um painel, em vez de devolver uma única cadeia. É assim que uma ação faz mais do que uma edição, ou deixa o cursor num sítio específico.
def transform(text):
replace(len(text), "(" + text + ")")
move_cursor(-1)toast() e close() pertencem aos painéis: uma ação não tem superfície própria onde mostrar uma mensagem. Ainda assim, ambos aparecem na consola enquanto a escreve.
A linguagem
Os scripts correm no interpretador do próprio Clink, não em CPython. Lê um subconjunto útil de Python: compreensões, lambdas, tuplos, conjuntos, formatos de f-string, try e except. Recusa o resto com uma mensagem que indica a linha.
Tipos
intfloatstrboolNonelisttupledictset
Palavras-chave
ifelifelsewhileforindefreturnbreakcontinuepassTrueFalseNoneandornotlambdatryexceptfinallyraiseimportfromasisdelglobal
Funções integradas
lenstrreprprintintfloatboolabsroundminmaxsumrangesortedreversedlistdictsettupleenumeratezipordchranyalltypemapfilterdivmodpowhexbinoctformatisinstancecallable
Métodos de string
upperlowercasefoldtitlecapitalizeswapcasestriplstriprstripreplacesplitrsplitsplitlinesjoinstartswithendswithfindrfindindexrindexcountpartitionrpartitionzfillljustrjustcenterisdigitisnumericisalphaisalnumisspaceisupperisloweristitleremoveprefixremovesuffixformat
Métodos de lista
appendextendpopinsertremoveindexcountsortreverseclearcopy
Métodos de dicionário
keysvaluesitemsgetpoppopitemsetdefaultupdateclearcopy
Métodos de conjunto
adddiscardremovepopclearcopyupdateunionintersectiondifferencesymmetric_differenceissubsetissupersetisdisjoint
Métodos de tuplo
countindex
Métodos de uma correspondência regex
groupgroupsgroupdictstartendspan
Exceções
ExceptionValueErrorTypeErrorKeyErrorIndexErrorNameErrorZeroDivisionErrorAttributeErrorRuntimeErrorStopIteration
Recusado
classwithnonlocalassertyieldasyncawaitmatch
Espaços de nomes
Podem importar-se estes espaços de nomes, e mais nada. Cada um apenas calcula: não há sistema de ficheiros, nem rede, nem processo ao alcance de um script.
import json
dumpsloads
import math
acosasinatanatan2ceilcombcopysigncosdegreeseexpfabsfactorialfloorfmodgcdhypotinfisfiniteisinfisnanlcmloglog10log2nanpipowprodradianssinsqrttantautrunc
import random
choicechoicesrandintrandomrandrangesampleseedshuffleuniform
import re
DOTALLIIGNORECASEMMULTILINESescapefindallfinditerfullmatchmatchsearchsplitsubsubn
import sys
version
import time
formatmonotonicpartstime
import re
def transform(text):
return re.sub(r"\s+", " ", text).strip()O motor de expressões regulares é o do próprio Clink e gasta o mesmo orçamento de passos que o resto do script, por isso um padrão que de outro modo demoraria uma eternidade acaba num erro, e não num teclado que deixa de responder. Retrorreferências e lookaround não existem.
Porquê não CPython
Uma extensão de teclado tem um limite de memória rígido e o iOS termina-a sem aviso quando o ultrapassa. Um runtime completo de Python não caberia ao lado do teclado, por isso o Clink traz um interpretador pequeno escrito para a tarefa: sem imports, sem ficheiros, sem rede, e com um orçamento de passos que termina o script descontrolado em vez do teclado.
print vai para a consola do editor, nunca para aquilo que está a escrever.