Skip to content

Commit

Permalink
corrigindo ajuda desformatada (fix #719) (#766)
Browse files Browse the repository at this point in the history
* corrigindo ajuda desformatada

* atualizando testes

* iniciando testes

* terminando testes

* verificando travis

* testando travis

* testando travis 2

* testando travis 3

* testando travis 4

* testando travis 5

* testando travis 6

* trocando charset de teste
  • Loading branch information
AdsonEsteves authored Mar 13, 2020
1 parent 7d802ab commit df0e705
Show file tree
Hide file tree
Showing 89 changed files with 1,726 additions and 588 deletions.
14 changes: 7 additions & 7 deletions core/src/main/antlr/Portugol.g4
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ inclusaoBiblioteca
: INCLUA BIBLIOTECA ID (OP_ALIAS_BIBLIOTECA ID)?;

listaDeclaracoes
: CONSTANTE? TIPO declaracao (',' declaracao)*;
: CONSTANTE? TIPO declaracao (VIRGULA declaracao)*;

declaracao
: declaracaoVariavel | declaracaoArray | declaracaoMatriz ;
Expand All @@ -23,7 +23,7 @@ declaracaoMatriz
: ID ABRE_COLCHETES linhaMatriz? FECHA_COLCHETES ABRE_COLCHETES colunaMatriz? FECHA_COLCHETES (OP_ATRIBUICAO inicializacaoMatriz)? ;

inicializacaoMatriz
: ABRE_CHAVES inicializacaoArray (',' inicializacaoArray)* FECHA_CHAVES;
: ABRE_CHAVES inicializacaoArray (VIRGULA inicializacaoArray)* FECHA_CHAVES;

linhaMatriz
: tamanhoArray ;
Expand All @@ -45,7 +45,7 @@ declaracaoFuncao
ABRE_CHAVES comando* FECHA_CHAVES ;

listaParametros
: parametro (',' parametro)* ;
: parametro (VIRGULA parametro)* ;

parametro
: TIPO E_COMERCIAL? ID (parametroArray | parametroMatriz)? ;
Expand Down Expand Up @@ -93,7 +93,7 @@ facaEnquanto
: FACA listaComandos ENQUANTO ABRE_PARENTESES expressao FECHA_PARENTESES ;

para
: PARA ABRE_PARENTESES inicializacaoPara? ';' condicao ';' incrementoPara FECHA_PARENTESES listaComandos ;
: PARA ABRE_PARENTESES inicializacaoPara? PONTOVIRGULA condicao PONTOVIRGULA incrementoPara FECHA_PARENTESES listaComandos ;

listaComandos
: (ABRE_CHAVES comando* FECHA_CHAVES | comando); // 1 comando ou um bloco de comandos entre chaves, possivelmente vazio
Expand All @@ -114,7 +114,7 @@ escolha
: ESCOLHA ABRE_PARENTESES expressao FECHA_PARENTESES ABRE_CHAVES caso* FECHA_CHAVES ;

caso
: CASO (CONTRARIO | expressao) ':' (comando* | ABRE_CHAVES comando* FECHA_CHAVES) pare? ;
: CASO (CONTRARIO | expressao) DOISPONTOS (comando* | ABRE_CHAVES comando* FECHA_CHAVES) pare? ;

pare
: PARE ;
Expand Down Expand Up @@ -163,7 +163,7 @@ expressao
;

listaExpressoes
: (expressao | atribuicaoComposta | atribuicao) (',' (expressao | atribuicaoComposta | atribuicao))* ;
: (expressao | atribuicaoComposta | atribuicao) (VIRGULA (expressao | atribuicaoComposta | atribuicao))* ;

escopoBiblioteca
: (ID '.') ;
: (ID PONTO) ;
13 changes: 11 additions & 2 deletions core/src/main/antlr/PortugolLexico.g4
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,15 @@ HEXADECIMAL: '0'[xX] SIMBOLO_HEXADECIMAL (SIMBOLO_HEXADECIMAL (SIMBOLO_HEXADECIM
fragment SIMBOLO_HEXADECIMAL: DIGITO | [A-Fa-f] ;
COMENTARIO: '/*' .*? '*/' -> channel(HIDDEN) ;
COMENTARIO_SIMPLES: '//' .*? '\n' -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4
//COMENTARIO_SIMPLES: '//' .*? $ -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4
COMENTARIO_SIMPLES: '//' .*? ('\n' | EOF) -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4
WS : [ \t\n\r]+ -> skip ;
WS : [ \t\r\n]+ -> channel(HIDDEN);
PONTO : '.';
VIRGULA : ',';
PONTOVIRGULA : ';';
DOISPONTOS : ':';

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ public ErroSintatico traduzirErroParsing(RecognitionException erro, String mensa
case "FECHA_CHAVES": return new ErroEscopo(linha, coluna, ErroEscopo.Tipo.FECHAMENTO, contextoAtual);
case "ABRE_PARENTESES": return new ErroParentesis(linha, coluna, ErroParentesis.Tipo.ABERTURA);
case "FECHA_PARENTESES": return new ErroParentesis(linha, coluna, ErroParentesis.Tipo.FECHAMENTO);
case "':'": return new ErroFaltaDoisPontos(linha, coluna);
case "';'": return new ErroTokenFaltando(linha, coluna, tokenEsperado);
case "DOISPONTOS": return new ErroFaltaDoisPontos(linha, coluna);
case "PONTOVIRGULA": return new ErroTokenFaltando(linha, coluna, tokenEsperado);
case "ENQUANTO": return new ErroPalavraReservadaEstaFaltando(linha, coluna, "enquanto");
case "TIPO": return new ErroTipoDeDadoEstaFaltando(linha, coluna);
case "PROGRAMA": return new ErroExpressoesForaEscopoPrograma(coluna, codigoFonte, ErroExpressoesForaEscopoPrograma.Local.ANTES);
Expand Down Expand Up @@ -128,7 +128,7 @@ private ErroSintatico traduzirErrosPara(int linha, int coluna, RecognitionExcept
{
String contextoAtual = contextos.getContextoAtual();
if (contextoAtual.equals("para") && !tokensEsperados.isEmpty()) {
if (!tokensEsperados.get(0).equals("';'")) {
if (!tokensEsperados.get(0).equals("PONTOVIRGULA")) {
boolean faltandoAbrirParenteses = tokensEsperados.contains("ABRE_PARENTESES");
boolean faltandoFecharParenteses = tokensEsperados.contains("FECHA_PARENTESES");
if (faltandoAbrirParenteses || faltandoFecharParenteses) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
public final class ResourceHandle
{
private static final Logger LOGGER = Logger.getLogger(ResourceHandle.class.getName());
private static final String CHARSET_PADRAO = "ISO-8859-1";
private static final String CHARSET_PADRAO = "UTF-8";

public static String readInternalResourceFile(String path) throws IOException
{
Expand Down Expand Up @@ -55,6 +55,6 @@ private static String read(InputStream inputStream, String charset) throws IOExc
throw ex;
}

return reading.toString().replaceAll(System.lineSeparator(), Portugol.QUEBRA_DE_LINHA);
return reading.toString().replaceAll(System.lineSeparator(), "\n");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void testComandoParaIncompleto() throws Exception {
Assert.assertEquals(1, analise.getErrosSintaticos().size());

ErroSintatico erro = analise.getErrosSintaticos().get(0);
Assert.assertTrue(erro instanceof ErroParaEsperaCondicao);
Assert.assertTrue(erro instanceof ErroParentesis);
}

@Test
Expand Down
4 changes: 4 additions & 0 deletions ide/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ task debug(dependsOn: compileJava, type: JavaExec) {
}
}

test {
testLogging.showStandardStreams = true
}

def loadJvmArgs(def platform = null){

def jvmConfigFile = new File(project.projectDir, 'jvm.config')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ public static String getText(String programaPortugol)
.append(token.getText())
.append("</span>");
break;
case PortugolLexer.COMENTARIO_SIMPLES:
case PortugolLexer.COMENTARIO:
htmlDoPortugol
.append("<span class=\"")
Expand All @@ -124,7 +125,7 @@ public static String getText(String programaPortugol)
.append(token.getText())
.append("</span>");
}
}
}
return htmlDoPortugol.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,21 @@
import br.univali.portugol.nucleo.asa.ASAPrograma;
import br.univali.portugol.nucleo.asa.ExcecaoVisitaASA;
import br.univali.portugol.nucleo.execucao.gerador.GeradorCodigoJava;
import br.univali.ps.dominio.PortugolHTMLHighlighter;
import br.univali.ps.ui.editor.Utils;
import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* @author Elieser
*/
public class IntegracaoFormatadorTest
{
private static final Logger LOGGER = Logger.getLogger(IntegracaoFormatadorTest.class.getName());

@Test
public void testaFormatacaoExemplos() throws FileNotFoundException, ErroCompilacao, ExcecaoVisitaASA, IOException, Exception
{
Expand All @@ -43,6 +49,17 @@ public void testaFormatacaoExemplos() throws FileNotFoundException, ErroCompilac
testaExemplo(diretorio);
}
}

@Test
public void testaFormatacaoAjuda() throws FileNotFoundException, ErroCompilacao, ExcecaoVisitaASA, IOException, Exception
{
File dirExemplos = new File("../ide/src/main/assets/ajuda/recursos/exemplos");

File[] diretorios = dirExemplos.listFiles();
for (File diretorio : diretorios) {
testaAjuda(diretorio);
}
}

private String geraCodigoJava(String codigoPortugol, long seed) throws Exception
{
Expand Down Expand Up @@ -96,5 +113,42 @@ private void testaExemplo(File exemplo) throws Exception
}
}
}

private void testaAjuda(File ajuda) throws Exception
{
if (ajuda.isDirectory()) {
File files[] = ajuda.listFiles();
for (File file : files) {
testaAjuda(file);
}
} else {
if (ajuda.getName().endsWith(".por")) {
System.out.println("Testando "+ajuda.getParent()+" "+ ajuda.getName() + " ...");
String codigoPortugol = new String(Files.readAllBytes(Paths.get(ajuda.toURI())), "ISO-8859-1");

String nomeCompleto = getClass().getCanonicalName();
int indicePonto = nomeCompleto.lastIndexOf(".");
String localPath = nomeCompleto.substring(0, indicePonto).replace('.', '/');

String ajudaPath = ajuda.getPath().replace("\\", "/");
int indicePasta = ajudaPath.lastIndexOf("/exemplos");
ajudaPath = ajudaPath.substring(indicePasta, ajudaPath.length());

localPath = localPath+ajudaPath;
localPath = localPath.replace("\\", "/");
String nomehtml = localPath.replace(".por", ".html");

String codigoHTML = PortugolHTMLHighlighter.getText(Utils.removerInformacoesPortugolStudio(codigoPortugol));
String codigoHTMLCorreto = ResourceHandle.readInternalResourceFile(nomehtml);
codigoHTML = codigoHTML.replaceAll("\\s+", "");
codigoHTMLCorreto = codigoHTMLCorreto.replaceAll("\\s+", "");
//System.out.println(codigoHTML);
Assert.assertEquals("Os códigos HTML gerados não são iguais!", codigoHTMLCorreto, codigoHTML);

System.out.println(ajuda.getName() + " testado com sucesso!");
System.out.println();
}
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package br.univali.ps.ui.editor.formatador;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public final class ResourceHandle
{
private static final Logger LOGGER = Logger.getLogger(ResourceHandle.class.getName());
private static final String CHARSET_PADRAO = "UTF-8";

public static String readInternalResourceFile(String path) throws IOException
{
return read(Thread.currentThread().getContextClassLoader().getResourceAsStream(path), CHARSET_PADRAO);
}

public static String readInternalResourceFile(String path, String charset) throws IOException
{
return read(Thread.currentThread().getContextClassLoader().getResourceAsStream(path), charset);
}

public static String readExternalResourceFile(File file) throws IOException
{
return read(new FileInputStream(file), CHARSET_PADRAO);
}

public static String readExternalResourceFile(File file, String charset) throws IOException
{
return read(new FileInputStream(file), charset);
}

private static String read(InputStream inputStream, String charset) throws IOException
{
StringBuilder reading = new StringBuilder();

try (InputStreamReader isr = new InputStreamReader(inputStream, charset); BufferedReader reader = new BufferedReader(isr))
{
int read;
char[] buffer = new char[4096];

while ((read = reader.read(buffer, 0, buffer.length)) > 0)
{
reading.append(buffer, 0, read);
}
}
catch (Exception ex)
{
LOGGER.log(Level.SEVERE, null, ex);

throw ex;
}

return reading.toString().replaceAll(System.lineSeparator(), "\n");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<span class="porPalavraReservada">inclua</span> <span class="porPalavraReservada">biblioteca</span> <span class="porID">Mouse</span>
<span class="porPalavraReservada">inclua</span> <span class="porPalavraReservada">biblioteca</span> <span class="porID">Graficos</span> <span class="porDesconhecido">--></span> <span class="porID">g</span>
<span class="porID">Mouse</span><span class="porDesconhecido">.</span><span class="porID">ocultar_cursor</span><span class="porAgrupamentos">(</span><span class="porAgrupamentos">)</span>
<span class="porID">g</span><span class="porDesconhecido">.</span><span class="porID">iniciar_modo_grafico</span><span class="porAgrupamentos">(</span><span class="porLogico">verdadeiro</span><span class="porAgrupamentos">)</span>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<span class="porPalavraReservada">programa</span>
<span class="porAgrupamentos">{</span>
<span class="porPalavraReservada">inclua</span> <span class="porPalavraReservada">biblioteca</span> <span class="porID">Matematica</span>
<span class="porPalavraReservada">inclua</span> <span class="porPalavraReservada">biblioteca</span> <span class="porID">Texto</span> <span class="porDesconhecido">--></span> <span class="porID">t</span>
<span class="porPalavraReservada">funcao</span> <span class="porID">inicio</span><span class="porAgrupamentos">(</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">{</span>
<span class="porTipoDeclaracao">real</span> <span class="porID">resultado</span>
<span class="porID">resultado</span> <span class="porDesconhecido">=</span> <span class="porID">Matematica</span><span class="porDesconhecido">.</span><span class="porID">arredondar</span><span class="porAgrupamentos">(</span><span class="porID">Matematica</span><span class="porDesconhecido">.</span><span class="porID">PI</span><span class="porDesconhecido">,</span><span class="porNumeros">5</span><span class="porAgrupamentos">)</span>
<span class="porID">escreva</span><span class="porAgrupamentos">(</span><span class="porID">resultado</span><span class="porAgrupamentos">)</span>
<span class="porID">escreva</span><span class="porAgrupamentos">(</span><span class="porID">t</span><span class="porDesconhecido">.</span><span class="porID">caixa_alta</span><span class="porAgrupamentos">(</span><span class="porTexto">"texto"</span><span class="porAgrupamentos">)</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">}</span>
<span class="porAgrupamentos">}</span>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<span class="porPalavraReservada">const</span> <span class="porTipoDeclaracao">inteiro</span> <span class="porID">NOME_DA_CONSTANTE</span> <span class="porDesconhecido">=</span> <span class="porNumeros">3</span>
<span class="porPalavraReservada">const</span> <span class="porTipoDeclaracao">real</span> <span class="porID">NOME_DA_CONSTANTE2</span> <span class="porDesconhecido">=</span> <span class="porNumeros">45</span>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<span class="porPalavraReservada">programa</span>
<span class="porAgrupamentos">{</span>
<span class="porComentario">//Constante global do tipo de dado real
</span> <span class="porPalavraReservada">const</span> <span class="porTipoDeclaracao">real</span> <span class="porID">ACELERACAO_GRAVIDADE</span> <span class="porDesconhecido">=</span> <span class="porNumeros">9.78</span>

<span class="porPalavraReservada">funcao</span> <span class="porID">inicio</span><span class="porAgrupamentos">(</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">{</span>
<span class="porComentario">//Vetor constante local do tipo de dado caracter
</span> <span class="porPalavraReservada">const</span> <span class="porTipoDeclaracao">caracter</span> <span class="porID">VOGAIS</span><span class="porAgrupamentos">[</span><span class="porNumeros">5</span><span class="porAgrupamentos">]</span> <span class="porDesconhecido">=</span> <span class="porAgrupamentos">{</span><span class="porTexto">'a'</span><span class="porDesconhecido">,</span><span class="porTexto">'e'</span><span class="porDesconhecido">,</span><span class="porTexto">'i'</span><span class="porDesconhecido">,</span><span class="porTexto">'o'</span><span class="porDesconhecido">,</span><span class="porTexto">'u'</span><span class="porAgrupamentos">}</span>

<span class="porComentario">//Matriz constante local do tipo de dado inteiro
</span> <span class="porPalavraReservada">const</span> <span class="porTipoDeclaracao">inteiro</span> <span class="porID">TECLADO_NUMERICO</span><span class="porAgrupamentos">[</span><span class="porAgrupamentos">]</span><span class="porAgrupamentos">[</span><span class="porAgrupamentos">]</span> <span class="porDesconhecido">=</span> <span class="porAgrupamentos">{</span><span class="porAgrupamentos">{</span><span class="porNumeros">1</span><span class="porDesconhecido">,</span><span class="porNumeros">2</span><span class="porDesconhecido">,</span><span class="porNumeros">3</span><span class="porAgrupamentos">}</span><span class="porDesconhecido">,</span><span class="porAgrupamentos">{</span><span class="porNumeros">4</span><span class="porDesconhecido">,</span><span class="porNumeros">5</span><span class="porDesconhecido">,</span><span class="porNumeros">6</span><span class="porAgrupamentos">}</span><span class="porDesconhecido">,</span><span class="porAgrupamentos">{</span><span class="porNumeros">7</span><span class="porDesconhecido">,</span><span class="porNumeros">8</span><span class="porDesconhecido">,</span><span class="porNumeros">9</span><span class="porAgrupamentos">}</span><span class="porAgrupamentos">}</span>
<span class="porAgrupamentos">}</span>
<span class="porAgrupamentos">}</span>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<span class="porPalavraReservada">funcao</span> <span class="porTipoDeclaracao">real</span> <span class="porID">nome_da_funcao</span> <span class="porAgrupamentos">(</span><span class="porTipoDeclaracao">inteiro</span> <span class="porID">parametro1</span><span class="porDesconhecido">,</span><span class="porTipoDeclaracao">real</span> <span class="porID">parametro2</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">{</span>
<span class="porPalavraReservada">retorne</span> <span class="porID">parametro1</span> <span class="porDesconhecido">*</span> <span class="porID">parametro2</span>
<span class="porAgrupamentos">}</span>
<span class="porPalavraReservada">funcao</span> <span class="porTipoDeclaracao">inteiro</span> <span class="porID">nome_da_funcao2</span> <span class="porAgrupamentos">(</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">{</span>
<span class="porPalavraReservada">retorne</span> <span class="porNumeros">1</span>
<span class="porAgrupamentos">}</span>
<span class="porPalavraReservada">funcao</span> <span class="porID">nome_da_funcao3</span> <span class="porAgrupamentos">(</span><span class="porTipoDeclaracao">cadeia</span> <span class="porDesconhecido">&</span><span class="porID">parametro</span><span class="porAgrupamentos">)</span>
<span class="porAgrupamentos">{</span>
<span class="porID">parametro</span> <span class="porDesconhecido">=</span> <span class="porTexto">"Novo Valor"</span>
<span class="porAgrupamentos">}</span>
Loading

0 comments on commit df0e705

Please sign in to comment.