📝 Texto

Trabalhe com palavras, frases e caracteres - incluindo suporte completo a UTF-8!

💬

O que é texto?

Texto (ou string) é qualquer sequência de caracteres entre aspas. Use para nomes, mensagens, e qualquer informação textual.

local nome = "Maria"
local frase = "Olá, mundo!"
local emoji = "🎉"  -- UTF-8 funciona!

Aspas simples ou duplas

local texto1 = "Isso é texto"
local texto2 = 'Isso também'
local com_aspas = "Ele disse: 'Olá!'"

Concatenação (juntar textos)

local primeiro = "João"
local sobrenome = "Silva"
local completo = primeiro .. " " .. sobrenome
exiba(completo)  -- "João Silva"

Biblioteca Texto

Comprimento do texto

local mensagem = "Olá!"
exiba(texto.obtenha_comprimento(mensagem))  -- 4
exiba(#mensagem)  -- Atalho: também retorna 4

Maiúsculas e minúsculas

local texto = "Olá Mundo"
exiba(texto.converta_para_maiúscula(texto))  -- "OLÁ MUNDO"
exiba(texto.converta_para_minúscula(texto))  -- "olá mundo"

Extrair parte do texto

local frase = "Programar é legal"
exiba(texto.obtenha_subtexto(frase, 1, 9))   -- "Programar"
exiba(texto.obtenha_subtexto(frase, 14))       -- "legal" (até o fim)
exiba(texto.obtenha_subtexto(frase, -5))      -- "legal" (últimos 5)

Repetir texto

exiba(texto.repita("Ha", 3))  -- "HaHaHa"
exiba(texto.repita("=", 20))  -- "===================="

Inverter texto

exiba(texto.inverta("Sol"))  -- "loS"

Buscar e substituir

-- Encontrar texto
local frase = "Eu amo programar"
local inicio, fim = texto.encontre(frase, "amo")
exiba(inicio, fim)  -- 4, 6

-- Substituir texto
local novo = texto.substitua_globalmente(frase, "amo", "adoro")
exiba(novo)  -- "Eu adoro programar"

Formatação de texto

-- Formatar como printf em C
local nome = "Ana"
local idade = 15
local mensagem = texto.formate("%s tem %d anos", nome, idade)
exiba(mensagem)  -- "Ana tem 15 anos"

-- Formatação de números
exiba(texto.formate("%.2f", 3.14159))  -- "3.14"
exiba(texto.formate("%05d", 42))      -- "00042"

Trabalhar com bytes

-- Obter código ASCII/UTF-8 de caracteres
exiba(texto.obtenha_byte("A"))     -- 65
exiba(texto.obtenha_byte("ABC", 2))  -- 66 (segundo caractere)

-- Criar texto a partir de códigos
exiba(texto.crie_caractere(65, 66, 67))  -- "ABC"

Padrões (busca avançada)

-- Combinar padrão
local email = "contato@exemplo.com"
local usuario = texto.combine(email, "(.+)@")
exiba(usuario)  -- "contato"

-- Iterar sobre combinações
para palavra em texto.combine_globalmente("um dois três", "%w+") faça
    exiba(palavra)
fim
-- Exibe: "um", "dois", "três"

Biblioteca UTF-8

Comprimento em caracteres UTF-8

local texto = "Olá 👋"
exiba(#texto)  -- 8 (bytes)
exiba(utf8.obtenha_comprimento(texto))  -- 5 (caracteres)

Iterar sobre caracteres UTF-8

local texto = "Sol 🌞"

para posicao, codigo em utf8.itere_códigos(texto) faça
    local caractere = utf8.crie_caractere(codigo)
    exiba(posicao, codigo, caractere)
fim

Obter ponto de código

local emoji = "😀"
local codigo = utf8.obtenha_ponto_código(emoji, 1)
exiba(codigo)  -- 128512

Criar caractere UTF-8

-- Criar emoji a partir do código
local emoji = utf8.crie_caractere(128512)
exiba(emoji)  -- "😀"

Padrão de caractere UTF-8

-- Padrão para combinar um caractere UTF-8
exiba(utf8.padrão_caractere)  -- "[\0-\x7F\xC2-\xFD][\x80-\xBF]*"

Exemplo: Validador de email

função valida_email(email)
    -- Verifica se tem @ e ponto
    local tem_arroba = texto.encontre(email, "@")
    local tem_ponto = texto.encontre(email, "%.")

    se tem_arroba então
        se tem_ponto então
            retorne verdadeiro
        fim
    fim

    retorne falso
fim

exiba(valida_email("teste@exemplo.com"))  -- verdadeiro
exiba(valida_email("invalido"))         -- falso

Exemplo: Contador de palavras

função conta_palavras(texto)
    local contador = 0
    para palavra em texto.combine_globalmente(texto, "%w+") faça
        contador = contador + 1
    fim
    retorne contador
fim

local frase = "Programar em Sol é divertido!"
exiba("Palavras: " .. conta_palavras(frase))  -- 5

Exemplo: Formatador de nome

função formata_nome(nome_completo)
    -- Converte para minúsculas
    local minusculo = texto.converta_para_minúscula(nome_completo)

    -- Capitaliza primeira letra de cada palavra
    local formatado = texto.substitua_globalmente(minusculo, "(%a)([%w]*)",
        função(primeira, resto)
            retorne texto.converta_para_maiúscula(primeira) .. resto
        fim)

    retorne formatado
fim

exiba(formata_nome("JOÃO DA SILVA"))  -- "João Da Silva"
Agora você domina texto em Sol! Use UTF-8 para trabalhar com emojis e caracteres internacionais.
```