--[[ @Titulo: Auxiliar @Autores: Raphael Phitan v1.0 / Pedro de Goes e Walther Maciel v1.1 / Rafael Mores v1.2, v1.3, v1.4 @data:15 de maio 2010 @versão:1.4 ]]-- local string = string os.setlocale("", "ctype") module("auxiliar") -- ****************************************************************************************** -- ********************************* RECURSOS COMPARTILHADOS ******************************** -- ****************************************************************************************** local conversoesAcentos = { ['à'] = 'a', ['á'] = 'a', ['â'] = 'a', ['ã'] = 'a', ['ç'] = 'c', ['è'] = 'e', ['é'] = 'e', ['ê'] = 'e', ['ì'] = 'i', ['í'] = 'i', ['î'] = 'i', ['ñ'] = 'n', ['ò'] = 'o', ['ó'] = 'o', ['ô'] = 'o', ['õ'] = 'o', ['ù'] = 'u', ['ú'] = 'u', ['û'] = 'u', ['ü'] = 'u', ['&'] = ' e ', } -- ****************************************************************************************** -- ************************************* FUNÇÕES INTERNAS *********************************** -- ****************************************************************************************** --[[ @Titulo: REMOVE ACENTO @Objetivo: Remove o acento do caracter recebido. @Contexto: REMOVE ACENTOS @Recursos: caracter a ser avaliado, conversoesAcentos @Atores: sistema. --]] local function removeAcento(caractere) -- Episódio 1: Transforma o caracter em caixa baixa. caractere = string.lower(caractere) -- Episódio 2: Retorna o caracter sem acento. return conversoesAcentos[caractere] or caractere end --[[ @Titulo: ELIMINA CARACTERE ACENTUADO @Objetivo: Elimina o caracter recebido se eset for acentuado. @Contexto: ELIMINA ACENTOS @Recursos: caracter a ser avaliado, conversoesAcentos @Atores: sistema. --]] local function eliminaCaractereAcentuado(caractere) if conversoesAcentos[caractere] then -- Episódio 1: Elimina o carcter se ele estiver acentuado return "" else -- Episódio 2: Mantém o caracter recebido caso ele não esteja acentuado return caractere end end --[[ @Titulo: COVERTER PARA CARACTERES ACENTUADOS @Objetivo: Converter uma sequência de escape em seu caracter acentuado correspondente. @Contexto: LIMPAR STRING. @Recursos: Sequência de escape que deve ser substituída, tabela com caracteres acentuados e códigos de escape correspondentes. @Atores: sistema. ]]-- local function converteEscapeHtml(escape) -- Episódio 1: Cria uma tabela com todos os caracteres acentuados e seus códigos de escape correspondentes. local conversoesHtml = { ["Agrave"] = 'À', ["Aacute"] = 'Á', ["Acirc"] = 'Â', ["Atilde"] = 'Ã', ["agrave"] = 'à', ["aacute"] = 'á', ["acirc"] = 'â', ["atilde"] = 'ã', ["Ccedil"] = 'Ç', ["ccedil"] = 'ç', ["Egrave"] = 'È', ["Eacute"] = 'É', ["Ecirc"] = 'Ê', ["egrave"] = 'è', ["eacute"] = 'é', ["ecirc"] = 'ê', ["Igrave"] = 'Ì', ["Iacute"] = 'Í', ["Icirc"] = 'Î', ["igrave"] = 'ì', ["iacute"] = 'í', ["icirc"] = 'î', ["Ntilde"] = 'Ñ', ["ntilde"] = 'ñ', ["Ograve"] = 'Ò', ["Oacute"] = 'Ó', ["Ocirc"] = 'Ô', ["Otilde"] = 'Õ', ["ograve"] = 'ò', ["oacute"] = 'ó', ["ocirc"] = 'ô', ["otilde"] = 'õ', ["Ugrave"] = 'Ù', ["Uacute"] = 'Ú', ["Ucirc"] = 'Û', ["Uuml"] = 'Ü', ["ugrave"] = 'ù', ["uacute"] = 'ú', ["ucirc"] = 'û', ["uuml"] = 'ü', ["amp"] = "&", ["nbsp"] = " ", } --Episódio 2: Retorna o caracter acentuado corresponde a sequência de escape recebida ou remove o escape. return conversoesHtml[escape] or "" end --[[ @Titulo: COVERTER PARA CARACTERES DE ESCAPE @Objetivo: Converter uma sequência de caracteres acentuados em seu caracter de escape correspondente. @Contexto: LIMPAR STRING. @Recursos: caractere acentuado a ser substituído , tabela (reversa) com caracteres acentuados e códigos de escape correspondentes. @Atores: sistema. ]]-- local function converteCaractereEmEscapeHtml(caractere) -- Episódio 1: Cria uma tabela com todos os caracteres acentuados e seus códigos de escape correspondentes. local conversoesEscape = { ['À'] = "À", ['Á'] = "Á", ['Â'] = "Â", ['Ã'] = "Ã", ['à'] = "à", ['á'] = "á", ['â'] = "â", ['ã'] = "ã", ['Ç'] = "Ç", ['ç'] = "ç", ['È'] = "È", ['É'] = "É", ['Ê'] = "Ê", ['è'] = "è", ['é'] = "é", ['ê'] = "ê", ['Ì'] = "Ì", ['Í'] = "Í", ['Î'] = "Î", ['ì'] = "ì", ['í'] = "í", ['î'] = "î", ['Ñ'] = "Ñ", ['ñ'] = "ñ", ['Ò'] = "Ò", ['Ó'] = "Ó", ['Ô'] = "Ô", ['Õ'] = "Õ", ['ò'] = "ò", ['ó'] = "ó", ['ô'] = "ô", ['õ'] = "õ", ['Ù'] = "Ù", ['Ú'] = "Ú", ['Û'] = "Û", ['Ü'] = "Ü", ['ù'] = "ù", ['ú'] = "ú", ['û'] = "û", ['ü'] = "ü", ['&'] = "&", [' '] = " ", } --Episódio 2: Retorna o caracter acentuado corresponde a sequência de escape recebida ou remove o escape. return conversoesEscape[caractere] or caractere end --[[ @Título: CODIFICAÇÃO ACENTO UTF @Objetivo: Converter caracteres acentuados para seus respectivos códigos UTF @Contexto: ESCAPA STRING URL @Recursos: caracter acentuado e tabela de conversões UTF @Atores: sistema --]] local function codificaAcentoUTF(caractere) -- Episódio 1: Cria a tabela de conversões UTF local conversoesUTF = { ['à'] = '%c3%a0', ['á'] = '%c3%a1', ['â'] = '%c3%a2', ['ã'] = '%c3%a3', ['ç'] = '%c3%a7', ['è'] = '%c3%a8', ['é'] = '%c3%a9', ['ê'] = '%c3%aa', ['ì'] = '%c3%ac', ['í'] = '%c3%ad', ['î'] = '%c3%ae', ['ñ'] = '%c3%b1', ['ò'] = '%c3%b2', ['ó'] = '%c3%b3', ['ô'] = '%c3%b4', ['õ'] = '%c3%b5', ['ù'] = '%c3%b9', ['ú'] = '%c3%ba', ['û'] = '%c3%bb', ['ü'] = '%c3%bc', ['&'] = '%26', } -- Episódio 2: retorna o código UTF correspondente. return conversoesUTF[caractere] or caractere end --[[ @Titulo: REMOVER EXCESSO DE ESPAÇOS @Objetivo: Remover execsso de espaços do incio, meio e fim de uma string. @Contexto: LIMPAR STRING. @Recursos: string de onde serão eliminados os espaços extras. @Atores: string.gsub ]]-- local function removeExcessoEspacos(str) --Episódio 1: Remove os espaços extras do início da string. str = string.gsub(str, "^%s*", "") --Episódio 2: Remove os espaços extras do fim da string. str = string.gsub(str, "%s*$", "") --Episódio 3: Remove os espaços extras do meio da string. str = string.gsub(str, "%s%s+", " ") --Episódio 4: Retorna a string sem espaços extras return str end -- ****************************************************************************************** -- ********************************* FUNÇÕES EXTERNALIZADAS ********************************* -- ****************************************************************************************** --[[ @Titulo: LIMPAR STRING @Objetivo: Remove caracteres especiais da string, subsitui os caracteres acentuados por sequências de escape, converte a string toda para letras minúsculas e remove unicode. @Contexto: SELECIONAR CURRÍCULOS e PEGA NUMERO DE CITAÇÕES @Recursos: string que será limpa. @Atores: removeExcessoEspacos, converteEscapeHtml. --]] function limpaString(str) --Episódio 1: Converte sequências de escape HTML para caracters acentuados e remove qualquer tipo de código unicode da string. str = string.gsub(str, "&(%w-);", converteEscapeHtml) --Episódio 2: Remove qualquer caracter estranho da string, como por exemplo, acentuação. str = string.gsub(str, "([^%w%s&])", " ") --Episódio 3: Tranforma os caracteres da string em caracteres minúsculos. str = string.lower(str) --Episódio 4: REMOVER EXCESSO DE ESPAÇOS str = removeExcessoEspacos(str) --Episódio 5: Retorna a string limpa. return str end --[[ @Titulo: FORMATAR STRING ACENTUADA PARA HTML @Objetivo: subsitui os caracteres acentuados por sequências de escape. @Contexto: Mensagens de Erro e/ou informativas em geral, geradas a partir de um script .lua , que pode ser rodado apenas se estiver na codificação ANSI, ao contrário do padrão XML que é UTF-8. @Recursos: string que será formatada. @Atores: converteCaractereEmEscapeHtml. --]] function formataStringParaHTML(str) --@Episódio 1: Converte caracteres acentuados em sequências de escape HTML. --@Exceção: String nula retorna nulo if not str then return nil end str = string.gsub(str, "%a", converteCaractereEmEscapeHtml) --@Episódio 2: Retorna a string formatada. return str end --[[ @Título: ESCAPA STRING URL @Objetivo: Dexar uma string compatível com a codificação utilizada nos endereços URL @Contexto MONTAR URL @Recursos: string a ser alterada @Atores: limpaString, codificaAcentoUTF, string.gsub --]] function escapaStringURL(str) --@Episódio 1: Limpa a string str = limpaString(str) --@Episódio 2: converte acentos para escapes UTF-8 str = string.gsub(str, "(.)", codificaAcentoUTF) --@Episódio 3: escapa espaços str = string.gsub(str, "(%s)", "%%20") --@Episódio 4: retorna string modificada. return str end --[[ @Título: ELIMINA ACENTOS @Objetivo: Eliminar caracteres acentuados de uma string @Contexto: PEGA NUMERO DE CITAÇÕES @Recursos: string a ser modificada @Atores: string.gsub, eliminaCaractereAcentuado --]] function eliminaAcentos(str) --@Episódio 1: Elimina acentos str = string.gsub(str, "(.)", eliminaCaractereAcentuado) --@Episódio 2: retorna string modificada. return str end --[[ @Título: REMOVE ACENTOS @Objetivo: Remove o acento do caracter acentuado. @Contexto: N/A @Recursos: string a ser modificada @Atores: string.gsub, removeAcento --]] function removeAcentos(str) --@Episódio 1: Remove acentos str = string.gsub(str, "(.)", removeAcento) --@Episódio 2: retorna string modificada. return str end --[[ @Título: LER TAG XML @Objetivo: Lê conteúdo da tag XML especificada e retorna como string @Contexto: N/A @Recursos: nome da tag em formato string, texto XML em string @Atores: string.gsub --]] function lerTag( tag , texto ) --[[ @Episõdio 1: Retorna conteúdo da tag. @Exceção: String texto nula retorna "" ]]-- if not texto then return "" else return string.gsub(texto, '(.*)(<'..tag..'>)(.*)()(.*)', '%3') end end