Browse Source

Rely on Zip extension for extracting highlight.js

microsub
J. King 5 years ago
parent
commit
b514ac983b
  1. 79
      RoboFile.php

79
RoboFile.php

@ -1,7 +1,6 @@
<?php <?php
use Robo\Result; use Robo\Result;
use splitbrain\PHPArchive\Zip;
class RoboFile extends \Robo\Tasks { class RoboFile extends \Robo\Tasks {
const BASE = __DIR__.\DIRECTORY_SEPARATOR; const BASE = __DIR__.\DIRECTORY_SEPARATOR;
@ -209,45 +208,49 @@ class RoboFile extends \Robo\Tasks {
// compile the stylesheet // compile the stylesheet
$t->taskExec($postcss)->arg($scss)->option("-o", $css); $t->taskExec($postcss)->arg($scss)->option("-o", $css);
// download highlight.js // download highlight.js
$t->addCode(function() use ($tmp, $themeout) { if (extension_loaded("zip")) {
$languages = ["php", "bash", "shell", "xml", "nginx", "apache"]; $t->addCode(function() use ($tmp, $themeout) {
$post = http_build_query((function($langs) { $languages = ["php", "bash", "shell", "xml", "nginx", "apache"];
$out = []; $post = http_build_query((function($langs) {
foreach($langs as $l) { $out = [];
$out[$l.".js"] = "on"; foreach($langs as $l) {
$out[$l.".js"] = "on";
}
return $out;
})($languages));
$conn = @fopen("https://highlightjs.org/download/", "r");
if ($conn === false) {
throw new Exception("Unable to download Highlight.js");
} }
return $out; foreach (stream_get_meta_data($conn)['wrapper_data'] as $field) {
})($languages)); if (preg_match("/^Set-Cookie: csrftoken=([^;]+)/i", $field, $cookie)) {
$conn = fopen("https://highlightjs.org/download/", "r"); break;
if ($conn === false) { }
throw new Exception("Unable to download Highlight.js");
}
foreach (stream_get_meta_data($conn)['wrapper_data'] as $field) {
if (preg_match("/^Set-Cookie: csrftoken=([^;]+)/i", $field, $cookie)) {
break;
} }
} $token = stream_get_contents($conn);
$token = stream_get_contents($conn); preg_match("/<input type='hidden' name='csrfmiddlewaretoken' value='([^']*)'/", $token, $token);
preg_match("/<input type='hidden' name='csrfmiddlewaretoken' value='([^']*)'/", $token, $token); $post = "csrfmiddlewaretoken={$token[1]}&$post";
$post = "csrfmiddlewaretoken={$token[1]}&$post"; $hljs = @file_get_contents("https://highlightjs.org/download/", false, stream_context_create(['http' => [
$hljs = file_get_contents("https://highlightjs.org/download/", false, stream_context_create(['http' => [ 'method' => "POST",
'method' => "POST", 'content' => $post,
'content' => $post, 'header' => [
'header' => [ "Referer: https://highlightjs.org/download/",
"Referer: https://highlightjs.org/download/", "Cookie: csrftoken={$cookie[1]}",
"Cookie: csrftoken={$cookie[1]}", "Content-Type: application/x-www-form-urlencoded",
"Content-Type: application/x-www-form-urlencoded", ],
], ]]));
]])); if ($hljs === false) {
if ($hljs === false) { throw new Exception("Unable to download Highlight.js");
throw new Exception("Unable to download Highlight.js"); } else {
} else { file_put_contents($tmp."highlightjs.zip", $hljs);
file_put_contents($tmp."highlightjs.zip", $hljs); }
} $z = new \ZipArchive;
$z = new Zip; $z->open($tmp."highlightjs.zip");
$z->open($tmp."highlightjs.zip"); $z->extractTo($themeout, "highlight.pack.js");
$z->extract($themeout, "", "", "highlight.pack.js"); }, "downloadHighlightjs");
}, "downloadHighlightjs"); } else {
$this->say("Zip extension not installed; not updating hightlight.js");
}
// execute the collection // execute the collection
return $t->run(); return $t->run();
} }

Loading…
Cancel
Save