{"id":2751,"date":"2017-02-24T13:36:29","date_gmt":"2017-02-24T17:36:29","guid":{"rendered":"http:\/\/linguagemprisma.br4.biz\/blog\/?p=2751"},"modified":"2017-02-24T14:38:25","modified_gmt":"2017-02-24T18:38:25","slug":"construtor-de-interface-grafica","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/igprisma\/construtor-de-interface-grafica\/","title":{"rendered":"Construtor de interface gr\u00e1fica"},"content":{"rendered":"<p>Voc\u00ea j\u00e1 viu ou ouviu falar sobre programas que desenham a interface gr\u00e1fica? S\u00e3o programas que tem a mesma caracter\u00edstica do clique e solte do Basic.<\/p>\n<p>(Antes de continuar baixe a vers\u00e3o mais atual Prisma &#8211; 1.0.99 ou superior &#8211; testado em Windows7, Mint17 e Mint18)<\/p>\n<h1>Para o Gtk+ temos o <strong>Glade:<\/strong><\/h1>\n<p><a href=\"https:\/\/glade.gnome.org\/\" target=\"_blank\">https:\/\/glade.gnome.org\/<\/a><\/p>\n<p><a href=\"http:\/\/ftp.gnome.org\/pub\/GNOME\/binaries\/win32\/glade\/3.8\/glade-3-8-5-installer.exe\">http:\/\/ftp.gnome.org\/pub\/GNOME\/binaries\/win32\/glade\/3.8\/glade-3-8-5-installer.exe<\/a><\/p>\n<p>No link acima voc\u00ea pode fazer o download para Windows (vers\u00e3o 3.8.5 para gtk2). J\u00e1 no Linux, use a central de programas de sua distro para instalar.<\/p>\n<p style=\"padding-left: 30px;\"><em>Obs. Mesmo que haja ferramentas como essa, \u00e9 sempre bom voc\u00ea aprender a fazer a interface gr\u00e1fica em puro c\u00f3digo para entender o funcionamento da mesma e ser um programador<\/em><em> melhor<\/em><em>.<\/em><\/p>\n<p style=\"padding-left: 30px;\"><em>Obs. Usando a interface gr\u00e1fica igbr em Prisma voc\u00ea ficar\u00e1 familiarizado com o mecanismo do Gtk (mesmo que ele seja em ingl\u00eas) e com o modo de funcionamento de tantos outros toolkits gr\u00e1ficos.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2752\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/02\/glade_ex-300x218.png\" alt=\"glade_ex\" width=\"438\" height=\"318\" srcset=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/02\/glade_ex-300x218.png 300w, https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2017\/02\/glade_ex.png 1023w\" sizes=\"auto, (max-width: 438px) 100vw, 438px\" \/><\/p>\n<p>Com esse programa, Glade, voc\u00ea cria a interface gr\u00e1fica rapidamente, salva em um arquivo do tipo xml que pode ser lido posteriormente por um programa que usa o Gtk.<\/p>\n<p>Para nossa sorte, o igbr que \u00e9 a biblioteca padr\u00e3o de interface gr\u00e1fica em Prisma \u00e9 feito em Gtk, logo voc\u00ea pode usar esse recurso em Prisma: o gtk_builder() traduzido como ig.construtor() em igbr.<\/p>\n<p style=\"padding-left: 30px;\"><em>Obs. Infelizmente tenho que dizer que nem todos os componentes dispon\u00edveis no Glade est\u00e3o implementados em Igbr. Podem at\u00e9 aparecer na janela certos componentes mas voc\u00ea n\u00e3o conseguir\u00e1 modific\u00e1-los via Prisma. Isso por enquanto, pois minha inten\u00e7\u00e3o \u00e9 de, ainda esse m\u00eas, colocar o maior n\u00famero de componentes e fun\u00e7\u00f5es no igbr, tais como: \u00e1rea de \u00edcones, seletores de arquivo, pasta, cor, etc. Dialogo de impress\u00e3o e outros!<\/em><\/p>\n<p>Por enquanto eu quis mostrar esse recurso para voc\u00ea, que j\u00e1 \u00e9 ou quer ser um user Prisma, ir se habituando enquanto n\u00e3o desenvolvo um construtor pr\u00f3prio na pr\u00f3pria linguagem como o <a href=\"http:\/\/gambas.sourceforge.net\/en\/main.html\" target=\"_blank\">Gambas.<\/a><\/p>\n<p>Veja o resultado da imagem acima em xml, salve como <strong>teste.glade<\/strong><\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;interface&gt;\r\n  &lt;requires lib=\"gtk+\" version=\"2.24\"\/&gt;\r\n  &lt;!-- interface-naming-policy project-wide --&gt;\r\n  &lt;object class=\"GtkWindow\" id=\"janela\"&gt;\r\n    &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n    &lt;child&gt;\r\n      &lt;object class=\"GtkFixed\" id=\"caixafixa1\"&gt;\r\n        &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n        &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkEntry\" id=\"texto1\"&gt;\r\n            &lt;property name=\"width_request\"&gt;378&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;41&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"invisible_char\"&gt;\u25cf&lt;\/property&gt;\r\n            &lt;property name=\"primary_icon_activatable\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"secondary_icon_activatable\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"primary_icon_sensitive\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"secondary_icon_sensitive\"&gt;True&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;23&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;82&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkButton\" id=\"botao1\"&gt;\r\n            &lt;property name=\"label\" translatable=\"yes\"&gt;Clique-me&lt;\/property&gt;\r\n            &lt;property name=\"width_request\"&gt;100&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;80&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"receives_default\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"use_action_appearance\"&gt;False&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;177&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;172&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkLabel\" id=\"rotulo1\"&gt;\r\n            &lt;property name=\"width_request\"&gt;362&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;34&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"label\" translatable=\"yes\"&gt;Digite algo na caixa de texto abaixo e pressione o bot\u00e3o!&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;26&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;9&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n      &lt;\/object&gt;\r\n    &lt;\/child&gt;\r\n  &lt;\/object&gt;\r\n&lt;\/interface&gt;<\/pre>\n<p>Precisaremos de basicamente tr\u00eas fun\u00e7\u00f5es:<\/p>\n<p>1 &#8211; Para criar o objeto construtor:<\/p>\n<pre class=\"lang:prisma decode:true \">local const =ig.construtor();<\/pre>\n<p>2 &#8211; Para carregar o arquivo do glade:<\/p>\n<pre class=\"lang:prisma decode:true\">ret = ig.construtor_leia_arquivo(const,\"teste.glade\");<\/pre>\n<p>O retorno \u00e9 verdadeiro em caso de sucesso ou falso em erro.<\/p>\n<p>3 &#8211; E, por fim, uma fun\u00e7\u00e3o que obt\u00e9m o componente do arquivo glade:<\/p>\n<pre class=\"lang:prisma decode:true \"> local jan=ig.construtor_obt_objeto(const,'janela');<\/pre>\n<p>Depois que voc\u00ea &#8216;pegou&#8217; o componente em uma vari\u00e1vel como na fun\u00e7\u00e3o acima, basta us\u00e1-lo normalmente com as fun\u00e7\u00f5es igbr.<\/p>\n<p>Obs.: a fun\u00e7\u00e3o para obter o componente serve para qualquer componente: bot\u00f5es, janelas, caixa, mensagem, menu, combos etc.<\/p>\n<p>Veja o exemplo completo abaixo:<\/p>\n<p>Salve como contrutor.prisma na mesma pasta do teste.glade<\/p>\n<pre class=\"lang:prisma decode:true\">local ig=inclua'igbr'\r\nfuncao principal()\r\n local const =ig.construtor(); \r\n local ret = ig.construtor_leia_arquivo(const,'teste.glade');\r\n se nao ret entao erro'Erro ao ler arquivo teste.glade' fim;\r\n local jan=ig.construtor_obt_objeto(const,'janela');\r\n ig.conecte_funcao(jan,ig.destruido,ig.fimjanela);\r\n local texto1 = ig.construtor_obt_objeto(const,'texto1');\r\n local botao1 = ig.construtor_obt_objeto(const, 'botao1');\r\n ig.conecte_funcao(botao1,ig.clique, bt_func, texto1);\r\n \r\n ig.componente_mostre_todos(jan);\r\n ig.fimprograma();\r\n retorne 0;\r\nfim \/\/fim principal();\r\n\r\n\r\nfuncao bt_func(comp,dado)\r\n  local txt = ig.texto_obt_texto(dado);\r\n  ig.msg(nulo,'',txt);\r\nfim\r\n\r\n<\/pre>\n<p>Detalhes:<\/p>\n<pre class=\"lang:prisma decode:true\">local ig=inclua'igbr'<\/pre>\n<p>Essa fun\u00e7\u00e3o acima inclui a biblioteca gr\u00e1fica Igbr em Prisma.<\/p>\n<pre class=\"lang:prisma decode:true\">local const =ig.construtor(); \r\n local ret = ig.construtor_leia_arquivo(const,'teste.glade');\r\n se nao ret entao erro'Erro ao ler arquivo teste.ui' fim;<\/pre>\n<p>Logo acima, criamos um construtor &#8216;const&#8217;, lemos o arquivo &#8216;teste.glade&#8217;; e fazemos o tratamento de erro com o retorno ret.<\/p>\n<p><strong>fun\u00e7\u00e3o: ret = ig.construtor_leia_arquivo(const, arq);<\/strong><\/p>\n<p><strong>Par\u00e2metros:<\/strong><\/p>\n<p>1 &#8211; const : construtor criado com a fun\u00e7\u00e3o ig.contrutor();<\/p>\n<p>2 &#8211; arq : arquivo que cont\u00e9m o formato xm .glade. <strong>Obs. n\u00e3o precisa do caminho completo se o arquivo estiver na mesma pasta.<\/strong><\/p>\n<p><strong>Retorno:<\/strong><\/p>\n<p>1 &#8211; ret : verdadeiro em caso de sucesso, ou falso em erro.<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">local jan=ig.construtor_obt_objeto(const,'janela');\r\n ig.conecte_funcao(jan,ig.destruido,ig.fimjanela);<\/pre>\n<p>Neste trecho obtemos o componente &#8216;janela&#8217; do arquivo glade e gravamos na vari\u00e1vel local &#8216;jan&#8217;. Logo depois, conectamos o evento destruido da janela \u00e0 fun\u00e7\u00e3o ig.fimjanela para que o programa feche corretamente ao clicar no x da janela.<\/p>\n<hr \/>\n<pre class=\"lang:prisma decode:true\">local texto1 = ig.construtor_obt_objeto(const,'texto1');\r\nlocal botao1 = ig.construtor_obt_objeto(const, 'botao1');\r\n<\/pre>\n<p>Aqui em cima continuamos a obter os outros componentes: texto1 e botao1.<\/p>\n<pre class=\"lang:prisma decode:true\"> ig.conecte_funcao(botao1,ig.clique, bt_func, texto1);<\/pre>\n<p>Acima, conectamos uma fun\u00e7\u00e3o bt_func no evento clique do bot\u00e3o e passamos texto1 como dado extra para a callback.<\/p>\n<pre class=\"lang:prisma decode:true\">ig.componente_mostre_todos(jan);\r\nig.fimprograma();<\/pre>\n<p>Mostramos a janela juntamente com todos componentes filhos e iniciamos o la\u00e7o de eventos do Igbr.<\/p>\n<p>Veja abaixo a fun\u00e7\u00e3o callback que foi conectada ao bot\u00e3o:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao bt_func(comp,dado)\r\n  local txt = ig.texto_obt_texto(dado);\r\n  ig.msg(nulo,'',txt);\r\nfim<\/pre>\n<p>Como par\u00e2metros temos:<\/p>\n<p>1 &#8211; comp : o pr\u00f3prio componente conectado (botao) passado automaticamente a cada execu\u00e7\u00e3o da callback.<\/p>\n<p>2 &#8211; dado : \u00e9 o dado extra passado na fun\u00e7\u00e3o conecte_funcao();<\/p>\n<p>Obs. Uma fun\u00e7\u00e3o callback \u00e9 uma fun\u00e7\u00e3o que \u00e9 executada em resposta a algum evento. Ela \u00e9, automaticamente, chamada a cada ocorr\u00eancia do evento. No caso acima, \u00e9 o clique do bot\u00e3o botao1, isso significa que cada vez que o bot\u00e3o for clicado a fun\u00e7\u00e3o ser\u00e1 executada.<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<h1>\u00c9 poss\u00edvel obter a interface diretamente de uma string tamb\u00e9m!<\/h1>\n<p>Basta criar uma vari\u00e1vel com todo o conte\u00fado do arquivo teste.glade e us\u00e1-la no programa Prisma com a fun\u00e7\u00e3o:<\/p>\n<p><strong>ig.construtor_leia_string(cont, str_ui); <\/strong><\/p>\n<p>Veja o exemplo completo abaixo:<\/p>\n<p>Salve como str_glade.prisma<\/p>\n<pre class=\"lang:prisma decode:true  \">local ig=inclua'igbr'\r\n\r\nfuncao principal()\r\n local const =ig.construtor();\r\n \r\n local ret = ig.construtor_leia_string(const,str_ui);\r\n se nao ret entao erro'Erro ao carregar string glade'; fim\r\n local jan=ig.construtor_obt_objeto(const,'janela');\r\n ig.conecte_funcao(jan,ig.destruido,ig.fimjanela);\r\n local texto1 = ig.construtor_obt_objeto(const,'texto1');\r\n local botao1 = ig.construtor_obt_objeto(const, 'botao1');\r\n ig.conecte_funcao(botao1,ig.clique, bt_func, texto1);\r\n \r\n ig.componente_mostre_todos(jan);\r\n ig.fimprograma();\r\n retorne 0;\r\nfim \/\/fim principal();\r\n\r\n\r\nfuncao bt_func(comp,dado)\r\n  local txt = ig.texto_obt_texto(dado);\r\n  ig.msg(nulo,'',txt);\r\nfim\r\n\r\nstr_ui = [[\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;interface&gt;\r\n  &lt;requires lib=\"gtk+\" version=\"2.24\"\/&gt;\r\n  &lt;!-- interface-naming-policy project-wide --&gt;\r\n  &lt;object class=\"GtkWindow\" id=\"janela\"&gt;\r\n    &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n    &lt;child&gt;\r\n      &lt;object class=\"GtkFixed\" id=\"caixafixa1\"&gt;\r\n        &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n        &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkEntry\" id=\"texto1\"&gt;\r\n            &lt;property name=\"width_request\"&gt;378&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;41&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"invisible_char\"&gt;\u25cf&lt;\/property&gt;\r\n            &lt;property name=\"primary_icon_activatable\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"secondary_icon_activatable\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"primary_icon_sensitive\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"secondary_icon_sensitive\"&gt;True&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;23&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;82&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkButton\" id=\"botao1\"&gt;\r\n            &lt;property name=\"label\" translatable=\"yes\"&gt;Clique-me&lt;\/property&gt;\r\n            &lt;property name=\"width_request\"&gt;100&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;80&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"receives_default\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"use_action_appearance\"&gt;False&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;177&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;172&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n        &lt;child&gt;\r\n          &lt;object class=\"GtkLabel\" id=\"rotulo1\"&gt;\r\n            &lt;property name=\"width_request\"&gt;362&lt;\/property&gt;\r\n            &lt;property name=\"height_request\"&gt;34&lt;\/property&gt;\r\n            &lt;property name=\"visible\"&gt;True&lt;\/property&gt;\r\n            &lt;property name=\"can_focus\"&gt;False&lt;\/property&gt;\r\n            &lt;property name=\"label\" translatable=\"yes\"&gt;Digite algo na caixa de texto abaixo e pressione o bot\u00e3o!&lt;\/property&gt;\r\n          &lt;\/object&gt;\r\n          &lt;packing&gt;\r\n            &lt;property name=\"x\"&gt;26&lt;\/property&gt;\r\n            &lt;property name=\"y\"&gt;9&lt;\/property&gt;\r\n          &lt;\/packing&gt;\r\n        &lt;\/child&gt;\r\n      &lt;\/object&gt;\r\n    &lt;\/child&gt;\r\n  &lt;\/object&gt;\r\n&lt;\/interface&gt;\r\n]]\r\n\r\n<\/pre>\n<p>Note que usei duplos colchetes para string multilinha:<\/p>\n<p><strong>str_ui = [[ &#8230; ]]<\/strong><\/p>\n<p><strong>Dicas:<\/strong><\/p>\n<p>1 &#8211; Se voc\u00ea tem um programa que utiliza muitos di\u00e1logos, janelas, etc. crie no Glade e salve em arquivos separados. Ou em um s\u00f3 arquivo do tipo prisma, com vari\u00e1veis contendo as strings do arquivo glade. Logo, basta usar o comando inclua&#8221; ou\u00a0 executearquivo(&#8221;) para ler os dados e usar no programa principal.<\/p>\n<p>2 &#8211; Comece a &#8216;fu\u00e7ar&#8217; no Glade para aprender ou procure tutoriais na rede, mesmo sendo para outra linguagem, o que importa \u00e9 a parte da explica\u00e7\u00e3o do Glade.<\/p>\n<p>3 &#8211; Sugest\u00e3o: <a href=\"http:\/\/www.sourcecode.net.br\/2011\/11\/criando-interfaces-graficas-com-glade-e.html\" target=\"_blank\">http:\/\/www.sourcecode.net.br\/2011\/11\/criando-interfaces-graficas-com-glade-e.html<\/a> \u00e9 para python mas tente assimilar a parte que explica o Glade.<\/p>\n<p>Qualquer d\u00favida use o coment\u00e1rio ou o <a href=\"http:\/\/linguagemprisma.br4.biz\/prisma_forum\/\" target=\"_blank\">F\u00f3rum<\/a><\/p>\n<p>At\u00e9 mais, att. Adalberto.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea j\u00e1 viu ou ouviu falar sobre programas que desenham a interface gr\u00e1fica? S\u00e3o programas que tem a mesma caracter\u00edstica do clique e solte do Basic. (Antes de continuar baixe a vers\u00e3o mais atual Prisma &#8211; 1.0.99 ou superior &#8211; testado em Windows7, Mint17 e Mint18) Para o Gtk+ temos o Glade: https:\/\/glade.gnome.org\/ http:\/\/ftp.gnome.org\/pub\/GNOME\/binaries\/win32\/glade\/3.8\/glade-3-8-5-installer.exe No&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,7],"tags":[],"class_list":["post-2751","post","type-post","status-publish","format-standard","hentry","category-igprisma","category-interface_grafica","category-prisma"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=2751"}],"version-history":[{"count":25,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2751\/revisions"}],"predecessor-version":[{"id":2754,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/2751\/revisions\/2754"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=2751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=2751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=2751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}