{"id":1092,"date":"2013-07-29T16:52:53","date_gmt":"2013-07-29T16:52:53","guid":{"rendered":"http:\/\/blog.filipesaraiva.info\/?p=1092"},"modified":"2013-12-26T14:52:33","modified_gmt":"2013-12-26T14:52:33","slug":"backend-python-para-cantor-destaque-de-sintaxe-tab-complete-e-modo-interactive","status":"publish","type":"post","link":"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1092","title":{"rendered":"Backend Python para Cantor &#8211; Destaque de Sintaxe, Tab Complete, e Modo Interactive"},"content":{"rendered":"<p style=\"text-align: justify;\">Meu projeto no Google Summer of Code 2013, o <a href=\"http:\/\/blog.filipesaraiva.info\/?p=1081\" target=\"_blank\">desenvolvimento de um backend para python<\/a> no <a href=\"http:\/\/edu.kde.org\/cantor\/\" target=\"_blank\">Cantor<\/a>, atingiu alguns objetivos nas \u00faltimas semanas.<\/p>\n<p style=\"text-align: justify;\">Primeiramente eu desenvolvi a vers\u00e3o preliminar para as funcionalidades de destaque de sintaxe e tab complete. Esta etapa utilizou processamento de arquivos XML para prover um conjunto b\u00e1sico de <a href=\"http:\/\/docs.python.org\/2\/reference\/lexical_analysis.html#keywords\" target=\"_blank\">palavras-chave<\/a> e <a href=\"http:\/\/docs.python.org\/2\/library\/functions.html\" target=\"_blank\">fun\u00e7\u00f5es predefinidas<\/a> para aquelas funcionalidades. Para ativar o tab complete, basta pressionar o bot\u00e3o Tav ap\u00f3s ter digitado alguma letra ou conjunto de letras. Abaixo temos alguns screenshots destas funcionalidades (clique com o bot\u00e3o direito do mouse para ampliar as imagens):<\/p>\n<p><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1087\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1087\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_syntax_highlighting\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting-1024x552.png\" class=\"aligncenter size-large wp-image-1087\" alt=\"python_syntax_highlighting\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_syntax_highlighting-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Um simples destaque de sintaxe<br \/>\n<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1088\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1088\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_backend\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend-1024x575.png\" class=\"aligncenter size-large wp-image-1088\" alt=\"python_backend\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Mais destaque de sintaxe e tab complete<\/em><\/p>\n<p style=\"text-align: justify;\">Em seguida, a <a href=\"http:\/\/blog.filipesaraiva.info\/?p=769\" target=\"_blank\">vers\u00e3o inicial do backend desenvolvido durante o LaKademy<\/a> foi criada para dar suporte ao <a href=\"http:\/\/docs.python.org\/2\/tutorial\/interpreter.html#using-the-python-interpreter\" target=\"_blank\">modo de script<\/a> do python. Mas seria mais interessante dar suporte ao <a href=\"http:\/\/docs.python.org\/2\/tutorial\/interpreter.html#interactive-mode\" target=\"_blank\">modo interactive<\/a> no terminal do Cantor. Ent\u00e3o, para fazer isso, eu implementei um pr\u00e9-processamento nos c\u00f3digos do python que o usu\u00e1rio insere no Cantor antes de envi\u00e1-los ao interpretador python, adicionando alguns comandos para simular o modo interactive do python.<\/p>\n<p style=\"text-align: justify;\">Esta solu\u00e7\u00e3o utiliza o <a href=\"http:\/\/docs.python.org\/2\/c-api\/veryhigh.html#PyRun_SimpleString\" target=\"_blank\">PyRun_SimpleString<\/a> da <a href=\"http:\/\/docs.python.org\/2\/c-api\/\" target=\"_blank\">API python\/C<\/a> para processar os comandos python em modo de script. Existem outras fun\u00e7\u00f5es da API python\/C para processar os comandos python diretamente em modo interactive, por exemplo, <a href=\"http:\/\/docs.python.org\/2\/c-api\/veryhigh.html#PyRun_InteractiveOne\" target=\"_blank\">PyRun_InteractiveOne<\/a>, mas esta fun\u00e7\u00e3o requer que os comandos python a serem processados estejam em um arquivo, al\u00e9m do que acessar a sa\u00edda desse processamento \u00e9 algo bastante dif\u00edcil. Ent\u00e3o, para o momento,\u00a0 PyRun_SimpleString + pr\u00e9-processamento dos comandos \u00e9 uma solu\u00e7\u00e3o que est\u00e1 funcionando muito bem.<\/p>\n<p style=\"text-align: justify;\">Voc\u00ea pode ver nas screenshots que ilustram este post que as vari\u00e1veis e resultados de opera\u00e7\u00f5es apresentados na tela do Cantor n\u00e3o usam o comando print. Esta \u00e9 uma das caracter\u00edsticas do modo interactive do python:<\/p>\n<p style=\"text-align: center;\"><em><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1089\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1089\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_backend_aninhado1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1-1024x552.png\" class=\"aligncenter size-large wp-image-1089\" alt=\"python_backend_aninhado1\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado1-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><em>Mais exemplos de destaque de sintaxe e interactive mode<\/em><\/em><\/p>\n<p><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1090\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1090\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2.png\" data-orig-size=\"1366,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_backend_aninhado2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2-300x161.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2-1024x552.png\" class=\"aligncenter size-large wp-image-1090\" alt=\"python_backend_aninhado2\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2-1024x552.png\" width=\"698\" height=\"375\" srcset=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2-1024x552.png 1024w, https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/07\/python_backend_aninhado2-300x161.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em><em><em>Mais exemplos de destaque de sintaxe e interactive mode<\/em><\/em><\/em><\/p>\n<p style=\"text-align: justify;\">Agora eu estou desenvolvendo uma funcionalidade para listar todas as fun\u00e7\u00f5es predefinidas e palavras-chave de um m\u00f3dulo python espec\u00edfico que tenha sido importado durante a execu\u00e7\u00e3o do programa. Para tanto, eu estou usando o comando <a href=\"http:\/\/docs.python.org\/2\/library\/functions.html#dir\" target=\"_blank\">dir<\/a> do python para capturar esses dados. Esta funcionalidade prover\u00e1 estas palavras para o destaque de sintaxe e o tab complete, de uma forma din\u00e2mica. Assim, o backend para python dar\u00e1 suporte a qualquer m\u00f3dulo python, e n\u00e3o mais apenas ao scipy, numpy, e matplotlib.<\/p>\n<p style=\"text-align: justify;\">O backend para python est\u00e1 dispon\u00edvel no <a href=\"https:\/\/projects.kde.org\/projects\/kde\/kdeedu\/cantor\/repository\/show?rev=python-backend\" target=\"_blank\">branch python-backend no reposit\u00f3rio do Cantor<\/a>. Fique a vontade para test\u00e1-lo, mas lembre-se que o c\u00f3digo n\u00e3o est\u00e1 est\u00e1vel e finalizado no momento.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meu projeto no Google Summer of Code 2013, o desenvolvimento de um backend para python no Cantor, atingiu alguns objetivos nas \u00faltimas semanas. Primeiramente eu desenvolvi a vers\u00e3o preliminar para as funcionalidades de destaque de sintaxe e tab complete. Esta etapa utilizou processamento de arquivos XML para prover um conjunto b\u00e1sico de palavras-chave e fun\u00e7\u00f5es&hellip;&nbsp;<a href=\"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1092\" class=\"\" rel=\"bookmark\">Continue a ler &raquo;<span class=\"screen-reader-text\">Backend Python para Cantor &#8211; Destaque de Sintaxe, Tab Complete, e Modo Interactive<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[58,48,11,47,101,26,42,41,105,49,108,80],"class_list":["post-1092","post","type-post","status-publish","format-standard","hentry","category-software-livre","tag-cantor","tag-comunidade","tag-desenvolvimento","tag-gsoc","tag-gsoc2013-python-backend","tag-kde","tag-planet-mageia-portugues","tag-planeta-psl-pi","tag-planeta-python-brasil","tag-planetkde-portugues","tag-python","tag-python-backend"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1p2Jh-hC","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1092"}],"version-history":[{"count":1,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1092\/revisions"}],"predecessor-version":[{"id":1151,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1092\/revisions\/1151"}],"wp:attachment":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}