quinta-feira, 8 de maio de 2008

Apresentações em Scheme

Não sou um especialista em apresentações, mas de vez em quando surgem algumas para eu fazer. Não tenho o hábito de usar softwares para edição de apresentações como o Impress do Openoffice.org (é uma questão de preferência pessoal como usuário -- nada contra o Openoffice.org). Sobretudo, faço as apresentações com o visual mais simples possível, normalmente fundo branco com letras pretas, como uma página de livro tradicional.

Durante um bom tempo fui usuário de LaTeX (cheguei a fazer uma classe para apresentações -- Pauerpoint), mas algumas coisas são desnecessariamente difíceis de se fazer em LaTeX.

Então me ocorreu a idéia de implementar algo em Scheme para fazer apresentações. Com o uso de algumas coisas prontas em CSS e Javascript, a implementação em Scheme é surpreendentemente simples:

(use web-scheme)

(define (slide title-text . contents)
(div 'class "slide"
(h1 title-text)
(string-intersperse contents)))

(define (cover title-text . contents)
(div 'class "slide cover"
(h1 title-text)
(string-intersperse contents)))

(define (presentation . slides)
(ws:page
(string-intersperse slides)
additional-headers: (string-append
(link 'rel "stylesheet"
'type "text/css"
'media "screen, projection"
'href "show.css")
(script 'src "slidy.js"
'type "text/javascript"))))

O código acima, em Chicken Scheme, mostra as três funções para a montagem de uma apresentação. As partes de CSS e Javascript são do HTML Slidy.

Para criar uma apresentação, basta fazer algo como:

(presentation
(cover "Minha capa")
(slide "Introdução")
(slide "Fim"))

Para gerar o código HTML, que pode ser visualizado em qualquer browser, executo:

$ web-scheme2html minha-apresentacao.scm > minha-apresentacao.html

web-scheme2html é um script que acompanha a extensão web-scheme de Chicken.

Em http://g3pd.ucpel.tche.br/~mario/misc/upgrade-v2 está um exemplo de apresentação que fiz sobre programação para a Web com Scheme (boa parte da apresentação é sobre o básico da linguagem). O código fonte da apresentação está em http://g3pd.ucpel.tche.br/~mario/misc/upgrade-v2/index.ws.

Nenhum comentário: