Como ler arquivos Markdown com C++ para o Apache

E utilizando Marked.js para renderizar em HTML.


Como ler arquivos Markdown com C++ para o Apache

Antes de qualquer coisa precisamos habilitar o cgi no Apache para ler arquivos binários compilados em C++ .

Nós mostramos como fazer isso de forma detalhada no Curso de C++ Moderno Avançado, se você não adquiriu e não sabe, sugiro você ver esse artigo que apesar de ter feito para Shell Script, você pode seguir e alterar o .sh por .cpp.

Após isso basta criar o nosso código em C++ que irá ler o arquivo Markdown, da seguinte forma:

Vamos chamar ele de readfile.cpp. No meu caso que estou no Gentoo, ele fica dentro do diretório /var/www/localhost/cgi-bin . Dentro desse diretório, criei outro diretório de nome cpp .

Lembrando que em alguns casos precisa de permissão de root, exemplo: sudo mkdir -p /var/www/localhost/cgi-bin/cpp

#include <iostream>
#include <fstream>

template<typename T>
class ReadFile {
  public:
    ReadFile(){
      std::cout << "Content-Type: plain/text\n\n";
    }
    const std::string readfile( const T * myfile ){
      std::string lines, content;
      std::ifstream file( *myfile );

      if ( file.is_open() ) {
        while( getline( file, lines ) ){
          content += lines + "\n";
        }
        file.close();
      }else{
        return "Falha ao ler arquivo.";
      }

      return content;
    }
};



int main( int argc , char ** argv ){
  const std::string myfile = "/var/www/localhost/htdocs/file.md";
  ReadFile<std::string> r;
  std::cout << r.readfile( &myfile ) << '\n';
  return 0;
}

Perceba que o nome do arquivo que iremos ler é file.md(estou usando esse exemplo de arquivo markdown ), mas você pode fazer isso dinamicamente, esse é só um exemplo.

Agora é só compilar, exemplo: g++ readfile.cpp -o readfile. Pronto, agora temos um arquivo binário com mime-type plain/text de nome readfile somente.


Próximo passo é fazermos o download do Marked que é um parser em JavaScript que irá converter nosso Markdown em HTML:

wget https://cdn.jsdelivr.net/npm/marked/marked.min.js -O marked.js

Você pode fazer a requisição via GET ou POST de outras maneiras: com fetch, axios, … ou até mesmo com JavaScript puro! Mas nesse caso vamos usar jQuery por se tratar de uma lib de fácil manuseio e por conta da sua alta disponibilidade na internet. E também vamos baixar o jQuery:

wget https://terminalroot.com.br/assets/js/jquery-3.4.1.slim.min.js -O jquery.js

Note: que eu baixei a versão 3.4.1 que é a justamente a que eu uso no site Terminal Root.

Dentro do diretório que criei e escolhi baixar e salvar os arquivos, já há:

marked.js
jquery.js
file.md

Agora basta criarmos um arquivo no seu servidor Apache, exemplo index.html com o seguinte conteúdo:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Lendo arquivo Markdown com C++</title>
      <script src="jquery.js"></script>
      <script>
        $(function(){
           $.post("http://localhost/cgi-bin/cpp/readfile", function(mostrar){
            document.getElementById('app').innerHTML = marked( mostrar );
            });
        });
      </script>
   </head>
   <body>
      <div id="app" class="ui text container"></div>
       <script src="marked.js"></script>
   </body>
</html>

Note que o endereço do meu readfile está em: http://localhost/cgi-bin/cpp/readfile (no meu computador).

Pronto, agora é só acessar meu index.html que está na raiz do meu servidor e o file.md será exibido:

Lendo arquivo Markdown com C++

clique na imagem para ver em alta resolução

Lembrando que adicionei um CSS para ficar mais legal! 😃

Fácil, né?


A lista é grande porque a maioria dos aplicativos de sucesso usam C++.

Por hoje é só!

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cpp cppdaily javascript markdown html apache css


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!