{"id":1135,"date":"2013-09-25T22:02:03","date_gmt":"2013-09-25T21:02:03","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1135"},"modified":"2014-03-17T23:30:05","modified_gmt":"2014-03-17T22:30:05","slug":"parserhooks-1-1-released","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/","title":{"rendered":"ParserHooks 1.1 released!"},"content":{"rendered":"<div id=\"pN7RmhDXItdrT10z52+dK7YPKS3O1B0IIL9sfNM3k3w=_14157228f84:47cf750:9cd153d6_entryContent\" itemprop=\"description\">\n<p><a href=\"https:\/\/github.com\/wikimedia\/mediawiki-extensions-ParserHooks\/blob\/master\/README.md\" target=\"_blank\">ParserHooks<\/a> is a library that adds an object orientated and declarative parser hook interface on top of MediaWiki. (<a href=\"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/\" target=\"_blank\">Read about the initial release<\/a>)<\/p>\n<p>Today I finished up and released version 1.1<\/p>\n<p>The new features are support of tag extensions and a simplified way to register parser hook handlers.<\/p>\n<p>If you want to register a tag extension rather then a parser function, simply call registerHookHandler rather then registerFunctionHandler on your HookRegistrant object. Just like registerFunctionHandler it takes both a ParserHookDefinition and a ParserHookHandler object. This essentially means that if you have a definition and a handler, you can register the parser hook both as tag extension and parser function with no extra work.<\/p>\n<p>The simplification in the registration mechanism comes from the already mentioned registerFunctionHandler and registerHookHandler methods, which are new alternatives to registerFunction and registerHook, respectively. Rather then taking a FunctionRunner,\u00a0or a HookRunner object, they simply take the only two required constructor arguments for these runner classes, and create the runners themselves. This removes the need to deal or even know about the runner objects. The registerFunction and registerHook are still there, to allow working with such runners in case you need to specify more advanced non-default behavior.<\/p>\n<p>This release fixes a rather serious bug in parameter handling of parser functions. This bug had gone undetected by the unit tests, as it was a mismatch between my expectation of how the MediaWiki Parser interface would behave and reality. I discovered it when writing system tests for the <a href=\"https:\/\/github.com\/wikimedia\/mediawiki-extensions-SubPageList\/blob\/master\/README.md\" target=\"_blank\">SubPageList extension<\/a>, which now uses ParserHooks. Lesson learned: no slacking off on writing system tests when interacting with a third party API not fully understood.<\/p>\n<p>Updated documentation can be found in the <a href=\"https:\/\/github.com\/wikimedia\/mediawiki-extensions-ParserHooks\/blob\/master\/README.md\" target=\"_blank\">readme file<\/a>.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>ParserHooks is a library that adds an object orientated and declarative parser hook interface on top of MediaWiki. (Read about&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"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":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-1135","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ParserHooks 1.1 released! - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ParserHooks 1.1 released! - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"ParserHooks is a library that adds an object orientated and declarative parser hook interface on top of MediaWiki. (Read about&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2013-09-25T21:02:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-03-17T22:30:05+00:00\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"ParserHooks 1.1 released!\",\"datePublished\":\"2013-09-25T21:02:03+00:00\",\"dateModified\":\"2014-03-17T22:30:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/\"},\"wordCount\":283,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/\",\"name\":\"ParserHooks 1.1 released! - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"datePublished\":\"2013-09-25T21:02:03+00:00\",\"dateModified\":\"2014-03-17T22:30:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/09\\\/25\\\/parserhooks-1-1-released\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ParserHooks 1.1 released!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ParserHooks 1.1 released! - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/","og_locale":"en_US","og_type":"article","og_title":"ParserHooks 1.1 released! - Blog of Jeroen De Dauw","og_description":"ParserHooks is a library that adds an object orientated and declarative parser hook interface on top of MediaWiki. (Read about&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2013-09-25T21:02:03+00:00","article_modified_time":"2014-03-17T22:30:05+00:00","author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"ParserHooks 1.1 released!","datePublished":"2013-09-25T21:02:03+00:00","dateModified":"2014-03-17T22:30:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/"},"wordCount":283,"commentCount":0,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/","url":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/","name":"ParserHooks 1.1 released! - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"datePublished":"2013-09-25T21:02:03+00:00","dateModified":"2014-03-17T22:30:05+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/25\/parserhooks-1-1-released\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"ParserHooks 1.1 released!"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-ij","jetpack-related-posts":[{"id":1127,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/","url_meta":{"origin":1135,"position":0},"title":"ParserHooks declarative OOP API for MediaWiki released","author":"Jeroen","date":"2013-07-14","format":false,"excerpt":"Yes, there now is a nice OOP API that allows you to create MediaWiki parser hooks in declarative fashion! A few years back, I was sitting in c-base after the 27th Chaos Communication Congress had ended. I decided to quickly hack up a decent SubPageList extension for MediaWiki on top\u2026","rel":"","context":"With 1 comment","block_context":{"text":"With 1 comment","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1056,"url":"https:\/\/www.entropywins.wtf\/blog\/2011\/01\/11\/validator-0-4-3introducing-auto-documentation\/","url_meta":{"origin":1135,"position":1},"title":"Validator 0.4.3:introducing auto-documentation","author":"Jeroen","date":"2011-01-11","format":false,"excerpt":"It's been a while since the previous release of Validator, but this minor update includes some cool new functionality. As I was creating the SubPageList extension and it's documentation (at 27c3!), it occurred to me that to document the usage of the <subpages \/> parser hook, all the info I\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Some documentation (for the coordinates parser function) generated using the describe parser hook","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/01\/describe-coordinates-table.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":517,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/11\/03\/finally-maps-and-semantic-maps-0-4\/","url_meta":{"origin":1135,"position":2},"title":"Finally! Maps and Semantic Maps 0.4!","author":"Jeroen","date":"2009-11-03","format":false,"excerpt":"It's been almost 2 months since Maps version 0.3.4 was released. Although I did waste a lot of my time at school, I managed to get quite some important work done in that period. Version 0.4 mainly addressed new functionality, and some thorough refactoring for Maps, and only introduced 2\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1137,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/10\/15\/subpagelist-1-0-released\/","url_meta":{"origin":1135,"position":3},"title":"SubPageList 1.0 released!","author":"Jeroen","date":"2013-10-15","format":false,"excerpt":"I am happy to announce the immediate release of SubPageList 1.0. SubPageList is a MediaWiki extension with the following features: Adds a subpages parser hook that you can use to list subpages. Backward compatible with the SubPageList3 extension. Supports various parameters that enable you to customize the subpage list both\u2026","rel":"","context":"In \"MediaWiki\"","block_context":{"text":"MediaWiki","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/mediawiki\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":479,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/10\/14\/working-on-maps-and-semantic-maps-0-4\/","url_meta":{"origin":1135,"position":4},"title":"Working on Maps and Semantic Maps 0.4","author":"Jeroen","date":"2009-10-14","format":false,"excerpt":"Since the 0.3.4 release of both Maps and Semantic Maps, I've been putting the little free time I have to use by working on the to-do's for the next release. Originally this would have been 0.3.5, but I've added several things to it, that made me decide to make it\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":697,"url":"https:\/\/www.entropywins.wtf\/blog\/2010\/02\/01\/maps-and-semantic-maps-0-5-3-released\/","url_meta":{"origin":1135,"position":5},"title":"Maps and Semantic Maps 0.5.3 released","author":"Jeroen","date":"2010-02-01","format":false,"excerpt":"Today I released Maps and Semantic Maps 0.5.3. Both releases mainly include bug-fixes, some of which quite important: Fixed JavaScript bug causing all OSM maps to fail. Pretty important yeah :) Fixed issue causing a fatal error when executing a query on Special:Ask with the \"map\" format. Fixed issue causing\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1135"}],"version-history":[{"count":2,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1135\/revisions"}],"predecessor-version":[{"id":1271,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1135\/revisions\/1271"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}