Só explicando como funciona o formatador:
criei algumas listas de palavras:
FMT_BLANKLINE - as que vão pular linha (PROCEDURE,CLASS,etc)
FMT_GO_AHEAD - as que vão causar indentação pra frente, tipo IF, DO WHILE, FOR, PROCEDURE
FMT_GO_BACK - as que vão causar indentação pra trás, tipo ENDIF, ENDDO
FMT_AT_BEGIN - as que vão ficar no início da linha, tipo PROCEDURE, CLASS, FUNCTION
FMT_TO_UPPER - as que vão ser convertidas pra maiúscula
FMT_TO_LOWER - idem pra minúscula
E uma função pra pesquisa disso na linha isCmdType( FMT_GO_AHEAD, cTexto )
Conforme vão sendo encontradas as palavras - no início da linha - a reação é de acordo com a lista.
Encontrou ENDIF, que pertence a FMT_GO_BACK, então reduz a indentação.
Encontrou PROCEDURE, que pertence a FMT_AT_BEGIN, então coloca na coluna ZERO
Encontrou PROCEDURE, que pertence a FMT_BLANK_LINE, então adiciona uma linha em branco antes e outra depois de PROCEDURE.
Encontrou uma palavra na lista de FMT_TO_UPPER, então converte só essa primeira palavra pra Uppercase
Encontrou duas linhas em branco, então retira uma delas, não pode ter mais de duas linhas em branco em seguida.
É relativamente simples.
As "encrencas" são as precauções sobre o que pode acontecer.
Acrescentei hoje referente a IF x;ENDIF na mesma linha, e também pra DO WHILE;ENDDO e WHILE;ENDDO
Ignorar se está entre #pragma begin dump e #pragma enddump
ignorar se é comentário está entre /* */
ignorar se é comentário com // ou *
apenas alinhar se for continuação da linha anterior (com ponto e vírgula)
Uma variável PROCEDURENAME não ser confundida com PROCEDURE
Uma variável NEXTLINE não ser confundida com NEXT
E por aí vai.
Então o sucesso depende do quanto fugir do normal.
Se a variável se chamar nNext, cNext, etc. tudo bem, a inicial indica o tipo de conteúdo e já não confunde com um comando.
Então, se formatar errado, é tentar verificar o porque, e dependendo do caso, corrigir o formatador ou alterar o fonte.
À primeira vista, o máximo que poderia acontecer seria deixar alguma parte do fonte "torta", ou maiúscula/minúscula errada no início da linha.
E tem as merd. dos comandos das LIBs.
OOHG tem até comando repetido pra coisas diferentes.
E tem horas que é PAGE, que em uma LIB causa indentação e em outra não - ou conserta pra uma ou conserta pra outra.... rs
Se PAGE não indentar... o ENDPAGE vai bagunçar.
Numa lib que o page não serve pra mesma coisa.... a identação de PAGE vai atrapalhar.
Então, dependendo da LIB, é ir la na lista de comandos FMT_GO_AHEAD, e retirar o PAGE da lista.
Adicionais:
Se tiver um comentário assim
*------------------------------------------------
ele é removido, porque não tem nada útil.
Isso do comentário é na rotina IsEmptyComment()
FOR EACH oElement IN cText
IF ! oElement $ "/-*~"
RETURN .F.
ENDIF
NEXT
RETURN .T.
Se o comentário só tiver essas letras "/-*~"
Porque tem comentário assim:
*-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/
Lógico... isso exigiu a verificação de /* */ pra não apagar o que não deve.
Estou avisando para o caso de alguém querer mexer no fonte do formatador, tem que tomar cuidado pra mexer nessa função IsEmptyComment()
Ou retornar sempre .F., pra não mexer em comentário nenhum.
Formatar fonte
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Formatar fonte
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Formatar fonte
Zé,
Será que esse teu formatador, ajustaria fontes com Hwgui ? Tenho uma porção aqui para ajeitar...kkkkk
Será que esse teu formatador, ajustaria fontes com Hwgui ? Tenho uma porção aqui para ajeitar...kkkkk
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Formatar fonte
No momento ele formata tudo da pasta ALLGUI e subpastas, vou ajustar pra poder passar nome de arquivo.
ALLGUI é HMG 3, HMG Extended, HWGUI e OOHG, todos os fontes e exemplos.
Deixei fonte contendo HB_INLINE de fora, porque mistura linguagem C no meio do fonte.
Para os #pragma begindump - #pragma enddump ok, o formatador não mexe nessa parte.
Por enquanto o máximo que poderia acontecer seria ficar torto para alguns programas.
Mas nunca se sabe o que se pode encontrar nos fontes.... rs
Por isso é bom o backup, ou copiar os fontes pra uma pasta e formatar lá, assim só ajusta o nome da pasta no formatador.
ALLGUI é HMG 3, HMG Extended, HWGUI e OOHG, todos os fontes e exemplos.
Deixei fonte contendo HB_INLINE de fora, porque mistura linguagem C no meio do fonte.
Para os #pragma begindump - #pragma enddump ok, o formatador não mexe nessa parte.
Por enquanto o máximo que poderia acontecer seria ficar torto para alguns programas.
Mas nunca se sabe o que se pode encontrar nos fontes.... rs
Por isso é bom o backup, ou copiar os fontes pra uma pasta e formatar lá, assim só ajusta o nome da pasta no formatador.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Formatar fonte
Consegui acertar para METHOD dentro de CLASS/CREATE CLASS
Não pula mais linha em branco, e sai na coluna que deveria.
Não pula mais linha em branco, e sai na coluna que deveria.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Formatar fonte
Enviei pra ser salvo na OOHG.
Problemas formatando TODOS os fontes oficiais da OOHG:
1) Um ponto e vírgula na linha anterior do otherwise, deixou o otherwise pra frente
2) Um IF daqueles..... rs
Foi só corrigir o fonte (considero um erro no fonte). Foi considerado como iif() pelo formatador
3) O comando que causa indentação dentro de IF
Até que são aceitáveis.
Com exceção do último, só alterar o que está no fonte, e tudo bem.
No último, não faço idéia qual poderia ser a alternativa.
Mas é um resultado bom.
Apenas 3 fontes precisaram de ajustes extras, e apenas um precisou formatação manual.
Problemas formatando TODOS os fontes oficiais da OOHG:
1) Um ponto e vírgula na linha anterior do otherwise, deixou o otherwise pra frente
Código: Selecionar todos
CASE dddd; // jdfhfhgf
OTHERWISE
Foi só corrigir o fonte (considero um erro no fonte). Foi considerado como iif() pelo formatador
Código: Selecionar todos
IF( x = 10 )
Código: Selecionar todos
IF ...
DEFINE WINDOW
ELSE
DEFINE WINDOW
ENDIF
END WINDOW
Com exceção do último, só alterar o que está no fonte, e tudo bem.
No último, não faço idéia qual poderia ser a alternativa.
Mas é um resultado bom.
Apenas 3 fontes precisaram de ajustes extras, e apenas um precisou formatação manual.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Formatar fonte
esqueci de mostrar aonde pegar
Como enviei pra fazer parte da OOHG, está no meu fork da OOHG.
https://github.com/JoseQuintas/oohg_cor ... format.prg
Como enviei pra fazer parte da OOHG, está no meu fork da OOHG.
https://github.com/JoseQuintas/oohg_cor ... format.prg
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/