diff --git a/.gitignore b/.gitignore index 72364f9..b34c01a 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,5 @@ ENV/ # Rope project settings .ropeproject + +tmp/ diff --git a/docs/00-prefacio.md b/docs/00-prefacio.md index 22e7cb8..c3a7a91 100644 --- a/docs/00-prefacio.md +++ b/docs/00-prefacio.md @@ -46,9 +46,9 @@ Esta edição de _Pense em Python_ tem as seguintes novidades: * Acrescentei algumas seções e mais detalhes sobre a web, para ajudar os principiantes a executar o Python em um navegador, e não ter que lidar com a instalação do programa até que seja necessário. -* Para “Módulo turtle” na página 63 troquei meu próprio pacote gráfico turtle, chamado Swampy, para um módulo Python mais padronizado, turtle, que é mais fácil de instalar e mais eficiente. +* Para [“Módulo turtle”](./04-caso-interface.md#42---módulo-turtle) troquei meu próprio pacote gráfico turtle, chamado Swampy, para um módulo Python mais padronizado, turtle, que é mais fácil de instalar e mais eficiente. -* Acrescentei um novo capítulo chamado “Extra”, que introduz alguns recursos adicionais do Python, não estritamente necessários, mas às vezes práticos. +* Acrescentei um novo capítulo chamado [“Extra”](./19-extra.md), que introduz alguns recursos adicionais do Python, não estritamente necessários, mas às vezes práticos. Espero que goste de trabalhar com este livro, e que ele o ajude a aprender a programar e pensar, pelo menos um pouquinho, como um cientista da computação. @@ -81,7 +81,7 @@ Exibe textos que devem ser substituídos por valores fornecidos pelos usuários ## Uso do código dos exemplos (de acordo com a política da O'Reilly) -Há material suplementar (exemplos de código, exercícios etc.) disponível para baixar em http://www.greenteapress.com/thinkpython2/code. +Há material suplementar (exemplos de código, exercícios etc.) disponível para baixar em [http://www.greenteapress.com/thinkpython2/code](http://www.greenteapress.com/thinkpython2/code). Este livro serve para ajudar você a fazer o que precisa. Em geral, se o livro oferece exemplos de código, você pode usá-los nos seus programas e documentação. Não é preciso entrar em contato conosco para pedir permissão, a menos que esteja reproduzindo uma porção significativa do código. Por exemplo, escrever um programa que use vários pedaços de código deste livro não exige permissão. Vender ou distribuir um CD-ROM de exemplos dos livros da O’Reilly exige permissão. Responder a uma pergunta citando este livro e reproduzindo exemplos de código não exige permissão. Incorporar uma quantidade significativa de exemplos de código deste livro na documentação do seu produto exige permissão. @@ -97,13 +97,13 @@ Temos uma página web para este livro na qual incluímos erratas, exemplos e qua * Página da edição em português -        http://www.novatec.com.br/catalogo/7522508-pense-em-python +        [http://www.novatec.com.br/catalogo/7522508-pense-em-python](http://www.novatec.com.br/catalogo/7522508-pense-em-python) * Página da edição original em inglês -        http://bit.ly/think-python_2E +        [http://bit.ly/think-python_2E](http://bit.ly/think-python_2E) -Para obter mais informações sobre os livros da Novatec, acesse nosso site em http://www.novatec.com.br. +Para obter mais informações sobre os livros da Novatec, acesse nosso site em [http://www.novatec.com.br](http://www.novatec.com.br). ## Agradecimentos diff --git a/docs/02-vars-expr-instr.md b/docs/02-vars-expr-instr.md index 4b2daa7..0be2e03 100644 --- a/docs/02-vars-expr-instr.md +++ b/docs/02-vars-expr-instr.md @@ -30,7 +30,7 @@ O caractere de sublinhar (\_) pode aparecer em um nome. Muitas vezes é usado em Se você der um nome ilegal a uma variável, recebe um erro de sintaxe: -``` +```python >>> 76trombones = 'big parade' SyntaxError: invalid syntax >>> more@ = 1000000 diff --git a/docs/09-caso-palavras.md b/docs/09-caso-palavras.md index 26ba080..31c13c6 100644 --- a/docs/09-caso-palavras.md +++ b/docs/09-caso-palavras.md @@ -88,7 +88,7 @@ Escreva uma função chamada `is_abecedarian` que retorne `True` se as letras nu ## 9.3 - Busca -Todos os exercícios na seção anterior têm algo em comum; eles podem ser resolvidos com o modelo de busca que vimos em “Buscando”, na página 123. O exemplo mais simples é: +Todos os exercícios na seção anterior têm algo em comum; eles podem ser resolvidos com o modelo de busca que vimos em [Buscando](./08-strings.md#86---buscando). O exemplo mais simples é: ```python def has_no_e(word): diff --git a/ebooks/PenseEmPython2e.epub b/ebooks/PenseEmPython2e.epub new file mode 100644 index 0000000..98f9ee6 Binary files /dev/null and b/ebooks/PenseEmPython2e.epub differ diff --git a/ebooks/metadata.xml b/ebooks/metadata.xml new file mode 100644 index 0000000..898792d --- /dev/null +++ b/ebooks/metadata.xml @@ -0,0 +1,4 @@ +Pense em Python +Allen Downey +Creative Commons +pt-BR \ No newline at end of file diff --git a/util/epub.py b/util/epub.py new file mode 100755 index 0000000..29a767b --- /dev/null +++ b/util/epub.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +from glob import glob +import shutil +import subprocess +import os + + +URL_REPO = 'https://github.com/PenseAllen/PensePython2e/raw/master' + + +def _project_path(): + return os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +def _get_path(p): + return os.path.join(_project_path(), p) + + +def _fix_images_url(files, tmp_dir): + """ Corrige as urls das imagens. + Por algum motivo o pandoc não estava conseguindo baixar as imagens + do site para embedar no epub. Com esse código eu gero arquivos + temporários com as essas referências acertadas para a mesma imagem + dentro do projeto. + """ + os.makedirs(tmp_dir) + fixed_files = [] + fixed_path = os.path.relpath(_project_path()) + for fp in files: + file_name = os.path.split(fp)[1] + output = os.path.join(tmp_dir, file_name) + with open(fp) as input_file: + fixed_str = input_file.read().replace(URL_REPO, fixed_path) + with open(output, 'w') as output_file: + output_file.write(fixed_str) + fixed_files.append(output) + return fixed_files + + +def main(): + glob_filter = _get_path('docs/*.md') + capa = _get_path('img/Capa_PenseEmPython332x461-borda.png') + metadata = _get_path('ebooks/metadata.xml') + output = _get_path('ebooks/PenseEmPython2e.epub') + files = glob(glob_filter) + files.sort() + files.pop() + tmp_dir = _get_path('tmp') + files = _fix_images_url(files, tmp_dir) + # Monta os argumentos do pandoc + args = ['pandoc', '--epub-cover-image=' + capa, '--epub-metadata=' + metadata] + args.extend(files) + args.append('-o') + args.append(output) + # Executa o pandoc + subprocess.call(args) + # Remove arquivos temporários + shutil.rmtree(tmp_dir) + print('Gerado epub em', output) + + +if __name__ == '__main__': + main()