OSDN Git Service

deploy: 403842186304d8e8bc6bb8d782fe5bcec0e713b1
authorHayao0819 <Hayao0819@users.noreply.github.com>
Sat, 9 Oct 2021 12:55:23 +0000 (12:55 +0000)
committerHayao0819 <Hayao0819@users.noreply.github.com>
Sat, 9 Oct 2021 12:55:23 +0000 (12:55 +0000)
200 files changed:
.gitmodules [new file with mode: 0644]
README.md [new file with mode: 0644]
alter/Config.js [new file with mode: 0644]
alter/Define.js [new file with mode: 0644]
alter/Download.js [new file with mode: 0644]
alter/HTMLClass.js [new file with mode: 0644]
alter/Header.js [new file with mode: 0644]
alter/Menu.js [new file with mode: 0644]
alter/Title.js [new file with mode: 0644]
alter/alterlinux.json [new file with mode: 0644]
alter/index.html [new file with mode: 0644]
alteriso-options-generator/LICENSE [new file with mode: 0644]
alteriso-options-generator/favicon.ico [new file with mode: 0644]
alteriso-options-generator/index.php [new file with mode: 0644]
alteriso-options-generator/kernellist.js [new file with mode: 0644]
alteriso-options-generator/main.js [new file with mode: 0644]
alteriso-options-generator/mobile.css [new file with mode: 0644]
alteriso-options-generator/pc.css [new file with mode: 0644]
blog/.gitignore [new file with mode: 0644]
blog/archetypes/default.md [new file with mode: 0644]
blog/config.toml [new file with mode: 0644]
blog/content/posts/20211009/index.md [new file with mode: 0644]
blog/themes/smigle/LICENSE [new file with mode: 0644]
blog/themes/smigle/README.md [new file with mode: 0644]
blog/themes/smigle/archetypes/default.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/config.yaml [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/about.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/posts/emoji-support.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/posts/markdown-syntax.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/posts/math-typesetting.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/posts/placeholder-text.md [new file with mode: 0644]
blog/themes/smigle/exampleSite/content/posts/rich-content.md [new file with mode: 0644]
blog/themes/smigle/images/screenshot.png [new file with mode: 0644]
blog/themes/smigle/images/tn.png [new file with mode: 0644]
blog/themes/smigle/layouts/404.html [new file with mode: 0644]
blog/themes/smigle/layouts/_default/baseof.html [new file with mode: 0644]
blog/themes/smigle/layouts/_default/default.html [new file with mode: 0644]
blog/themes/smigle/layouts/_default/summary.html [new file with mode: 0644]
blog/themes/smigle/layouts/categories/taxonomy.html [new file with mode: 0644]
blog/themes/smigle/layouts/categories/terms.html [new file with mode: 0644]
blog/themes/smigle/layouts/index.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/footer.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/head.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/header.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/pagination.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/postMeta.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/postMetaDetailed.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/postsByDate.html [new file with mode: 0644]
blog/themes/smigle/layouts/partials/terms.html [new file with mode: 0644]
blog/themes/smigle/layouts/posts/list.html [new file with mode: 0644]
blog/themes/smigle/layouts/posts/single.html [new file with mode: 0644]
blog/themes/smigle/layouts/tags/taxonomy.html [new file with mode: 0644]
blog/themes/smigle/layouts/tags/terms.html [new file with mode: 0644]
blog/themes/smigle/netlify.toml [new file with mode: 0644]
blog/themes/smigle/static/android-chrome-192x192.png [new file with mode: 0644]
blog/themes/smigle/static/android-chrome-512x512.png [new file with mode: 0644]
blog/themes/smigle/static/apple-touch-icon.png [new file with mode: 0644]
blog/themes/smigle/static/browserconfig.xml [new file with mode: 0644]
blog/themes/smigle/static/css/font.css [new file with mode: 0644]
blog/themes/smigle/static/css/reset.css [new file with mode: 0644]
blog/themes/smigle/static/css/smigle.css [new file with mode: 0644]
blog/themes/smigle/static/favicon-16x16.png [new file with mode: 0644]
blog/themes/smigle/static/favicon-32x32.png [new file with mode: 0644]
blog/themes/smigle/static/favicon.ico [new file with mode: 0644]
blog/themes/smigle/static/fonts/iosevka-bold.woff2 [new file with mode: 0644]
blog/themes/smigle/static/fonts/iosevka-oblique.woff2 [new file with mode: 0644]
blog/themes/smigle/static/fonts/iosevka-regular.woff2 [new file with mode: 0644]
blog/themes/smigle/static/images/brandIcon.svg [new file with mode: 0644]
blog/themes/smigle/static/js/.gitkeep [new file with mode: 0644]
blog/themes/smigle/static/mstile-150x150.png [new file with mode: 0644]
blog/themes/smigle/static/safari-pinned-tab.svg [new file with mode: 0644]
blog/themes/smigle/static/site.webmanifest [new file with mode: 0644]
blog/themes/smigle/theme.toml [new file with mode: 0644]
blog/update-theme.sh [new file with mode: 0755]
buildmydist-2/404.php [new file with mode: 0644]
buildmydist-2/commonhtml/aftermain.php [new file with mode: 0644]
buildmydist-2/commonhtml/beforemain.php [new file with mode: 0644]
buildmydist-2/commonhtml/footer.php [new file with mode: 0644]
buildmydist-2/commonhtml/head.php [new file with mode: 0644]
buildmydist-2/commonhtml/header.php [new file with mode: 0644]
buildmydist-2/commonhtml/jsloader.php [new file with mode: 0644]
buildmydist-2/commonhtml/sidemenu.php [new file with mode: 0644]
buildmydist-2/commonhtml/warning.php [new file with mode: 0644]
buildmydist-2/favicon.ico [new file with mode: 0644]
buildmydist-2/images/hayao.jpg [new file with mode: 0755]
buildmydist-2/index.php [new file with mode: 0644]
buildmydist-2/ingredient.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/alteriso3.0/index.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/basic-usage/index.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/customize/images/splash.png [new file with mode: 0644]
buildmydist-2/pages/alteriso3/customize/index.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/error/index.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/index.php [new file with mode: 0644]
buildmydist-2/pages/alteriso3/relation.php [new file with mode: 0644]
buildmydist-2/pages/archiso/index.php [new file with mode: 0644]
buildmydist-2/pages/common/index.php [new file with mode: 0644]
buildmydist-2/pages/fedora33/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/create-config-file/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/desktop-env/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/gdm.jpg [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/lightdm-gtk-greeter.png [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/lightdm-slick-greeter.jpeg [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/lightdm-webkit2-greeter.jpg [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/lxdm.png [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/images/sddm-default-theme.jpg [new file with mode: 0644]
buildmydist-2/pages/misc/display-manager/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/gtk-icon-theme/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/pkgbuild/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/qt5ct/images/qt5ct-1.png [new file with mode: 0644]
buildmydist-2/pages/misc/qt5ct/images/qt5ct-2.png [new file with mode: 0644]
buildmydist-2/pages/misc/qt5ct/images/with-qt5ct-vlc.png [new file with mode: 0644]
buildmydist-2/pages/misc/qt5ct/images/without-qt5ct-vlc.png [new file with mode: 0644]
buildmydist-2/pages/misc/qt5ct/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/relation.php [new file with mode: 0644]
buildmydist-2/pages/misc/skeldir/index.php [new file with mode: 0644]
buildmydist-2/pages/misc/virtual/images/vbox-1.png [new file with mode: 0644]
buildmydist-2/pages/misc/virtual/images/vmware-1.png [new file with mode: 0644]
buildmydist-2/pages/misc/virtual/index.php [new file with mode: 0644]
buildmydist-2/pages/release/index.php [new file with mode: 0644]
buildmydist-2/pages/template/index.php [new file with mode: 0644]
buildmydist-2/pages/template/relation.php [new file with mode: 0644]
buildmydist-2/pages/ubuntu1804/index.php [new file with mode: 0644]
buildmydist-2/pages/ubuntu1804/preparation/index.php [new file with mode: 0644]
buildmydist-2/pages/ubuntu2004/index.php [new file with mode: 0644]
buildmydist-2/prism/prism.css [new file with mode: 0644]
buildmydist-2/prism/prism.js [new file with mode: 0644]
buildmydist-2/script/code.js [new file with mode: 0644]
buildmydist-2/script/easter.js [new file with mode: 0644]
buildmydist-2/script/footer.js [new file with mode: 0644]
buildmydist-2/script/footerFixed.js.no [new file with mode: 0644]
buildmydist-2/script/header.js [new file with mode: 0644]
buildmydist-2/script/main.js [new file with mode: 0644]
buildmydist-2/script/makeIndex.js [new file with mode: 0644]
buildmydist-2/script/scroll.js [new file with mode: 0644]
buildmydist-2/script/sidemenu.js.no [new file with mode: 0644]
buildmydist-2/style/common.css [new file with mode: 0644]
buildmydist-2/style/pc.css [new file with mode: 0644]
buildmydist-2/style/print.css [new file with mode: 0644]
buildmydist-2/style/sp.css [new file with mode: 0644]
buildmydist-2/style/var.css [new file with mode: 0644]
buildmydist/README.md [new file with mode: 0644]
buildmydist/code/highlight.pack.js [new file with mode: 0644]
buildmydist/code/vs2015.css [new file with mode: 0644]
buildmydist/favicon.ico [new file with mode: 0644]
buildmydist/favicon_old.ico [new file with mode: 0644]
buildmydist/images/basix_grub.PNG [new file with mode: 0644]
buildmydist/images/basix_install1.PNG [new file with mode: 0644]
buildmydist/images/basix_install2.PNG [new file with mode: 0644]
buildmydist/images/basix_install3.PNG [new file with mode: 0644]
buildmydist/images/basix_install_done.PNG [new file with mode: 0644]
buildmydist/images/basix_installicon.PNG [new file with mode: 0644]
buildmydist/images/bodhibuilder1.PNG [new file with mode: 0644]
buildmydist/images/leafpad_bodhibuilder.PNG [new file with mode: 0644]
buildmydist/images/leafpad_linenumber.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_done.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_download_1.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_download_2.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine1.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine2.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine3.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine4.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine5.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_newmachine6.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_setting1.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_setting2.PNG [new file with mode: 0644]
buildmydist/images/virtualbox_setting3.PNG [new file with mode: 0644]
buildmydist/index.html [new file with mode: 0644]
buildmydist/page/about.html [new file with mode: 0644]
buildmydist/page/customize.html [new file with mode: 0644]
buildmydist/page/distribution.html [new file with mode: 0644]
buildmydist/page/form-thanks.html [new file with mode: 0644]
buildmydist/page/form.html [new file with mode: 0644]
buildmydist/page/history.html [new file with mode: 0644]
buildmydist/page/makeiso.html [new file with mode: 0644]
buildmydist/page/preparation.html [new file with mode: 0644]
buildmydist/page/sitemap.html [new file with mode: 0644]
buildmydist/page/template.html [new file with mode: 0644]
buildmydist/page/website.html [new file with mode: 0644]
buildmydist/style/history.css [new file with mode: 0644]
buildmydist/style/main-resp.css [new file with mode: 0644]
buildmydist/style/main.css [new file with mode: 0644]
index.html [new file with mode: 0644]
keybase.txt [new file with mode: 0644]
old.html [new file with mode: 0644]
qiitacli/index.html [new file with mode: 0644]
sanmoku/Todo.md [new file with mode: 0644]
sanmoku/flowchart.html [new file with mode: 0644]
sanmoku/index.html [new file with mode: 0644]
sanmoku/script/define.js [new file with mode: 0644]
sanmoku/script/init.js [new file with mode: 0644]
sanmoku/script/judgement.js [new file with mode: 0644]
sanmoku/script/main.js [new file with mode: 0644]
sanmoku/style/common.css [new file with mode: 0644]
sanmoku/style/pc.css [new file with mode: 0644]
sanmoku/style/sp.css [new file with mode: 0644]
sleep/index.php [new file with mode: 0644]
sleep/sleep.php [new file with mode: 0644]
tatebou/index.html [new file with mode: 0644]
update-blog.sh [new file with mode: 0644]

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..1974fa1
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "blog/themes/smigle"]
+       path = blog/themes/smigle
+       url = https://gitlab.com/ian-s-mcb/smigle-hugo-theme.git
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..9d68e5c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+## hayao.fascode.net
+主にハヤオが作成したサイトを管理、公開するリポジトリです。  
+ドメインとサーバをFascode Networkにお借りして公開しています。  
+
+## プルリクエスト
+大歓迎です。`buildmydist-2`に特にお願いします。
+
diff --git a/alter/Config.js b/alter/Config.js
new file mode 100644 (file)
index 0000000..489d664
--- /dev/null
@@ -0,0 +1,7 @@
+'use strict';
+
+// 上部にヘッダーを固定する
+const FixedHeader = false;
+
+// ウェブサイトのタイトル
+const TitleStr = "Alter Linux Alpha Release"
diff --git a/alter/Define.js b/alter/Define.js
new file mode 100644 (file)
index 0000000..10ffc94
--- /dev/null
@@ -0,0 +1,33 @@
+'use strict';
+
+// ハンバーガーメニューのボタン
+const MenuButton = document.getElementById("menu_button");
+
+// ハンバーガーメニューの項目一覧
+const Menu = document.getElementById("menu");
+
+// リリース番号選択フォーム
+const ReleaseIdForm = document.getElementById("releaseidform");
+
+// エディション選択フォーム
+const EditionForm = document.getElementById("editionform");
+
+// ダウンロードボタン
+const DownloadButton = document.getElementById("downloadbutton");
+
+// <main>
+const Main = document.getElementById("main");
+
+// head内のタイトル
+const MetaTitle = document.getElementById("meta_title");
+
+// ヘッダー内のタイトル
+const HeaderTitle = document.getElementById("header_title");
+
+// 色
+const CommonColor = "green";
+
+//const Color1 = "black", Color2 = "white" , Color3 = "green-300"
+const Color1 = `${CommonColor}-900`
+const Color2 = `${CommonColor}-700`
+const Color3 = `${CommonColor}-200`
diff --git a/alter/Download.js b/alter/Download.js
new file mode 100644 (file)
index 0000000..6b490e4
--- /dev/null
@@ -0,0 +1,182 @@
+'use strict';
+
+// GETパラメータからrとeの値をそれぞれ取得する
+const GetParams = () => {
+    let ParamsArray = {
+        release: undefined,
+        edition: undefined,
+    };
+    let searchParams = new URLSearchParams(document.location.search.substring(1));
+    ParamsArray["release"] = searchParams.get("r")
+    ParamsArray["edition"] = searchParams.get("e")
+    return ParamsArray;
+}
+
+// ダウンロードIDを取得してフォームを作成
+const XmlReq = new XMLHttpRequest();
+let JsonData = null;
+XmlReq.onreadystatechange = function() {
+    if ((XmlReq.readyState === 4) && (XmlReq.status === 200)) {
+        JsonData = JSON.parse(XmlReq.responseText);
+        Object.keys(JsonData).reverse().forEach((ReleaseId) => {
+            //console.log(JsonData[ReleaseId])
+
+            if (JsonData[ReleaseId].disabled == true){
+                return;
+            }else{
+                console.log(ReleaseId + "を追加しました");
+            }
+
+            // セレクトボックス
+            let ReleaseIdOption = document.createElement("option");
+            ReleaseIdOption.value = ReleaseId;
+            ReleaseIdOption.innerText = ReleaseId;
+            ReleaseIdForm.insertAdjacentElement("afterbegin", ReleaseIdOption);
+        });
+
+        // URLのパラメータでリリース番号が指定されていた場合の処理
+        const ReleaseParam = GetParams()["release"];
+        let InitializeRelease = true // リリースフォームを初期化するかどうか
+
+        if (ReleaseParam){
+            //console.log(GetParams()["release"])
+            Array.from(ReleaseIdForm.options).forEach((e)=>{
+                if (e.value.toLowerCase() === ReleaseParam.toLowerCase()){
+                    e.selected = true;
+                    InitializeRelease = false
+                }
+            })
+        }
+
+        // GETでリリース番号が指定されていなければリリースフォームの初期化を行う
+        // 指定されていれば、その番号でエディション一覧を更新する
+        if(InitializeRelease){
+            // 「選択してください」にする
+            Array.from(ReleaseIdForm.options).slice(-1)[0].selected = true;
+
+            // エディションフォームを隠す
+            document.getElementById("editionform_div").classList.add("hidden");
+        }else{
+            Update_Edition();
+        }
+        
+
+        // ダウンロードリンクのClassを設定
+        Array.from(ReleaseIdForm.getElementsByTagName("option")).forEach((element) => {
+            element.classList.add("p-2", "cursor-pointer", "mt-1")
+        })
+
+    }
+}
+XmlReq.open("GET","/alter/alterlinux.json", true);
+XmlReq.send(null);
+
+
+// リリース番号が変更された時
+const Update_Edition = () => {
+    let SelectedReleaseId = ReleaseIdForm.value;
+    EditionForm.innerHTML = null;
+
+    if (SelectedReleaseId == "None" || SelectedReleaseId == undefined || SelectedReleaseId == null){
+        document.getElementById("editionform_div").classList.add("hidden");
+        ShowMsg("リリース番号を選択してください");
+        return 0;
+    }else{
+        console.log("エディション一覧を" + SelectedReleaseId + "に更新しました");
+        document.getElementById("editionform_div").classList.remove("hidden");
+    }
+
+    // 選択肢を作成
+    const createOption = (value, text, selected) =>{
+        let Option = document.createElement("option");
+
+        if (! selected) {
+            selected = false;
+        }
+        Option.value = value;
+        Option.innerText = text;
+        Option.selected = selected;
+        return Option;
+    }
+
+    // 選択してくださいを追加
+    EditionForm.insertAdjacentElement("afterbegin", createOption("None", "選択してください", true))
+
+    Object.keys(JsonData[SelectedReleaseId]).forEach((EditionName) => {
+        if (EditionName != "disabled" && EditionName != "disabled-edition"){
+            //EditionOption = document.createElement("option");
+            //EditionOption.value = EditionName;
+            //EditionOption.innerText = EditionName;
+            if (JsonData[SelectedReleaseId][EditionName] == null || (JsonData[SelectedReleaseId]["disabled-edition"] && JsonData[SelectedReleaseId]["disabled-edition"].includes(EditionName)) ){
+                console.log(`${EditionName}をスキップしました`);
+                return;
+            }
+            EditionForm.insertAdjacentElement("afterbegin", createOption(EditionName, EditionName, false));
+        }
+    })
+
+    const EditionParam = GetParams()["edition"];
+    if (EditionParam){
+        Array.from(EditionForm.getElementsByTagName("option")).forEach((e)=>{
+            if(e.value.toLowerCase() == EditionParam.toLowerCase()){
+                e.selected = true;
+            }
+        })
+    }
+    ShowEditionInfo();
+}
+
+ReleaseIdForm.addEventListener("change", (e) => {
+    Update_Edition();
+});
+
+
+// ダウンロードのエラーメッセージを表示する
+const ShowMsg = (message) => {
+    const messageElement = document.getElementById("message");
+    if (message){
+        messageElement.innerText = message;
+        console.log(message);
+    }else{
+        messageElement.innerText = "";
+    }
+    
+}
+
+// エディションが変更された時
+const ShowEditionInfo = () => {
+    const ReleaseId = ReleaseIdForm.value;
+    const EditionName = EditionForm.value;
+    if (ReleaseId == "None" || EditionName == "None"){
+        ShowMsg()
+        DownloadButton.classList.add("hidden")
+        return;
+    }
+    if (ReleaseId && EditionName){
+        ShowMsg(ReleaseId + "の" + EditionName + "が選択されました");
+        DownloadButton.classList.remove("hidden")
+    }else{
+        //ShowMsg();
+    }
+}
+EditionForm.addEventListener("change", ShowEditionInfo);
+ReleaseIdForm.addEventListener("change", ShowEditionInfo);
+
+//ダウンロードボタン
+DownloadButton.addEventListener("click", (element) => {
+
+    const ReleaseId = ReleaseIdForm.value
+    const EditionName = EditionForm.value
+    if (! EditionName || EditionName == "None"){
+        ShowMsg("設定が不完全です。リリース番号とエディションを適切に指定してください。\n指定してるにも関わらずエラーが出る場合は開発者に連絡してください。");
+        return;
+    }else{
+        const OsdnId = JsonData[ReleaseId][EditionName]
+        if (OsdnId){
+            location.href = "https://osdn.net/projects/alterlinux/releases/" + OsdnId
+        }else{
+            ShowMsg(`不明なエラーが発生しました。\nリリースIDの取得に失敗しました。`)
+        }
+        
+    }
+})
diff --git a/alter/HTMLClass.js b/alter/HTMLClass.js
new file mode 100644 (file)
index 0000000..b2b690a
--- /dev/null
@@ -0,0 +1,24 @@
+'use strict';
+
+// AddclassToElements(elements, class1, class2 ...)
+function AddClassToElements(Elements){
+    window.addEventListener("load", ()=>{Array.from(Elements).forEach((element)=>{
+        let ArgumentList = Array.from(arguments);
+            ArgumentList.shift();
+            ArgumentList.forEach((className) => {
+                element.classList.add(className);
+            })
+        });
+    })
+}
+
+AddClassToElements(document.getElementsByTagName("select"), "selectform-select", "block", "w-3/4", "text-black");
+AddClassToElements(document.getElementsByTagName("h2"), `bg-${Color1}`, "p-2", "rounded-full", "pl-5", "font-bold");
+AddClassToElements(document.getElementsByTagName("h3"), `bg-${Color1}`, "p-2", "m-2" , "rounded");
+AddClassToElements(Main.getElementsByTagName("p"), "p-2", "pl-5", "font-medium");
+AddClassToElements(Menu.getElementsByTagName("li"), "block", `hover:bg-${Color3}`, "hover:text-black", "hover:underline");
+AddClassToElements(Menu.getElementsByTagName("li"), "px-3", "py-2");
+AddClassToElements(menu.getElementsByTagName("a"), "block")
+
+document.getElementById("header_container").classList.add(`bg-${Color1}`);
+document.getElementsByTagName("body")[0].classList.add(`bg-${Color2}`);
diff --git a/alter/Header.js b/alter/Header.js
new file mode 100644 (file)
index 0000000..6101112
--- /dev/null
@@ -0,0 +1,30 @@
+'use strict';
+
+//ヘッダー固定
+if (FixedHeader){
+    Array.from(document.getElementsByTagName("header")).forEach((element) =>{
+        element.classList.add("fixed")
+    })
+}
+
+// ヘッダーの高さ確保
+const SetHeaderSpace = () =>{
+    const Header = document.getElementsByTagName("header")[0];
+    const Main   = document.getElementById("main");
+    Main.style.paddingTop = "calc(" + Header.clientHeight + "px + 1rem)";
+};
+if (FixedHeader){
+    window.addEventListener("resize", SetHeaderSpace);
+    window.addEventListener("load", SetHeaderSpace);
+}
+
+// ダウンロードリンクをヘッダーまで広げる
+window.addEventListener("load", (element)=>{
+    Array.from(Menu.getElementsByTagName("li")).forEach(e=>{
+        e.addEventListener ("click", ()=>{
+            location.href = e.getElementsByTagName("a")[0].href;
+        })
+        e.classList.add("cursor-pointer");
+    });
+});
+
diff --git a/alter/Menu.js b/alter/Menu.js
new file mode 100644 (file)
index 0000000..9918560
--- /dev/null
@@ -0,0 +1,32 @@
+'use strict';
+
+// ハンバーガーメニューの実装
+MenuButton.addEventListener("click", (e) => {
+    const ClassHidden = Array.from(Menu.classList).find(value => value.match(/hidden/g));
+    const Open = ()=> {
+        console.log("Open");
+        Menu.classList.remove(ClassHidden);
+        Menu.classList.add("block");
+    }
+    const Close = () =>{
+        console.log("Close");
+        Menu.classList.add("hidden");
+        Menu.classList.remove("block");
+    }
+    if (ClassHidden != undefined){
+        Open();
+    }else{
+        Close()
+    }
+});
+
+// メニュー外クリックで閉じる
+Main.addEventListener("click", function(){
+    const ClassHidden = Array.from(Menu.classList).find(value => value.match(/hidden/g));
+    if (ClassHidden == undefined){
+        console.log("Close");
+        Menu.classList.add("hidden");
+        Menu.classList.remove("block");
+    }
+})
+
diff --git a/alter/Title.js b/alter/Title.js
new file mode 100644 (file)
index 0000000..468db9f
--- /dev/null
@@ -0,0 +1,10 @@
+'use strict';
+
+window.addEventListener("load", () => {
+    // head内のタイトルを設定
+    MetaTitle.innerText = TitleStr;
+
+    // ヘッダー内のタイトル設定
+    HeaderTitle.innerText = TitleStr;
+})
+
diff --git a/alter/alterlinux.json b/alter/alterlinux.json
new file mode 100644 (file)
index 0000000..55bf02b
--- /dev/null
@@ -0,0 +1,210 @@
+{
+    "テンプレート": {
+        "Cinnamon": 0,
+        "Cinnamon-JP": 0,
+        "i3wm": 0,
+        "i3wm-JP": 0,
+        "Lxde": 0,
+        "Lxde-JP": 0,
+        "Plasma": 0,
+        "Plasma-JP": 0,
+        "Xfce": 0,
+        "Xfce-JP": 0,
+        "Source Code": 0,
+        "disabled": true,
+        "disabled-edition": []
+    },
+    "20Q1.1.0 Beta1": {
+        "Xfce": 72684,
+        "Xfce-JP": 72830,
+        "Source Code": 72985,
+        "disabled":false
+    },
+    "20Q1.2.0 Beta2": {
+        "Lxde": 72829,
+        "Lxde-JP": 72831,
+        "Xfce": 72833,
+        "Xfce-JP": 72832,
+        "Source Code": 72984,
+        "disabled":false
+    },
+    "20Q1.3.0 Beta3": {
+        "Lxde": 73063,
+        "Lxde-JP": 73064,
+        "Xfce": 73065,
+        "Xfce-JP": 73066,
+        "Source Code": 73074,
+        "disabled":false
+    },
+    "20Q1.3.1 Beta3.1 20200616": {
+        "Lxde": 73246,
+        "Lxde-JP": 73248,
+        "Xfce": 73249,
+        "Xfce-JP": 73250,
+        "Source Code": 73073,
+        "disabled":false
+    },
+    "20Q2.4.0 RC1 20200810": {
+        "Cinnamon": 73445,
+        "Cinnamon-JP": 73446,
+        "i3wm": 73447,
+        "i3wm-JP": 73448,
+        "Lxde": 73450,
+        "Lxde-JP": 73451,
+        "Xfce": 73452,
+        "Xfce-JP": 73453,
+        "Source Code": 73722,
+        "disabled": false
+    },
+    "20Q3.4.1 RC2 20201009": {
+        "Cinnamon": 73779,
+        "Cinnamon-JP": 73780,
+        "i3wm": 73785,
+        "i3wm-JP": 73786,
+        "Lxde": 73781,
+        "Lxde-JP": 73782,
+        "Xfce": 73783,
+        "Xfce-JP": 73784,
+        "Source Code": 73721,
+        "disabled": false
+    },
+    "20Q3.5.0 RC3 20201230": {
+        "Cinnamon": 74156,
+        "Cinnamon-JP": 74157,
+        "i3wm": 74162,
+        "i3wm-JP": 74163,
+        "Lxde": 74158,
+        "Lxde-JP": 74159,
+        "Xfce": 74160,
+        "Xfce-JP": 74161,
+        "Source Code": 75570,
+        "disabled": false
+    },
+    "20210705": {
+        "Cinnamon": 75483,
+        "Cinnamon-JP": 75484,
+        "i3wm": 75485,
+        "i3wm-JP": 75486,
+        "Lxde": 75487,
+        "Lxde-JP": 75488,
+        "Plasma": 75491,
+        "Plasma-JP": 75492,
+        "Xfce": 75489,
+        "Xfce-JP": 75490,
+        "Source Code": 75573,
+        "disabled": false
+    },
+    "20210711": {
+        "Cinnamon": 75528,
+        "Cinnamon-JP": 75529,
+        "i3wm": 75530,
+        "i3wm-JP": 75531,
+        "Lxde": 75532,
+        "Lxde-JP": 75533,
+        "Plasma": 75534,
+        "Plasma-JP": 75535,
+        "Xfce": 75536,
+        "Xfce-JP": 75537,
+        "Source Code": 75572,
+        "disabled": false
+    },
+    "20210715": {
+        "Cinnamon": 75558,
+        "Cinnamon-JP": 75559,
+        "i3wm": 75560,
+        "i3wm-JP": 75561,
+        "Lxde": 75562,
+        "Lxde-JP": 75563,
+        "Plasma": 75564,
+        "Plasma-JP": 75565,
+        "Xfce": 75566,
+        "Xfce-JP": 75567,
+        "Source Code": 75571,
+        "disabled": false
+    },
+    "20210718": {
+        "Cinnamon": 75587,
+        "Cinnamon-JP": 75588,
+        "i3wm": 75589,
+        "i3wm-JP": 75590,
+        "Lxde": 75591,
+        "Lxde-JP": 75592,
+        "Plasma": 75593,
+        "Plasma-JP": 75594,
+        "Xfce": 75595,
+        "Xfce-JP": 75596,
+        "Source Code": 75597,
+        "disabled": false
+    },
+    "20210811": {
+        "Cinnamon": 75716,
+        "Cinnamon-JP": 75717,
+        "i3wm": 75718,
+        "i3wm-JP": 75719,
+        "Lxde": 75720,
+        "Lxde-JP": 75721,
+        "Plasma": 75722,
+        "Plasma-JP": 75723,
+        "Xfce": 75724,
+        "Xfce-JP": 75725,
+        "Gnome": 75726,
+        "Gnome-JP": 75727,
+        "Source Code": 75728,
+        "disabled": false
+    },
+    "20210819 - Gnome": {
+        "Gnome": 75781,
+        "Gnome-JP": 75782,
+        "disabled": false
+    },
+    "20210819": {
+        "Cinnamon": 75716,
+        "Cinnamon-JP": 75717,
+
+        "i3wm": 75783,
+        "i3wm-JP": 75784,
+        "Lxde": 75785,
+        "Lxde-JP": 75786,
+        "Plasma": 75787,
+        "Plasma-JP": 75788,
+        "Xfce": 75789,
+        "Xfce-JP": 75790,
+        "Source Code": 75791,
+        "disabled": false
+    },
+    "20210913": {
+        "Cinnamon": 76029,
+        "Cinnamon-JP": 76030,
+        "Gnome": 76031,
+        "Gnome-JP": 76032,
+        "i3wm": 76033,
+        "i3wm-JP": 76034,
+        "Lxde": 76035,
+        "Lxde-JP": 76036,
+        "Plasma": 76037,
+        "Plasma-JP": 76038,
+        "Xfce": 76039,
+        "Xfce-JP": 76040,
+        "Source Code": 76044,
+        "disabled": false
+    },
+    "20210920": {
+        "Cinnamon": 76050,
+        "Cinnamon-JP": 76051,
+        "Gnome": 76052,
+        "Gnome-JP": 76053,
+        "i3wm": 76054,
+        "i3wm-JP": 76055,
+        "Lxde": 76056,
+        "Lxde-JP": 76057,
+        "Plasma": 76058,
+        "Plasma-JP": 76059,
+        "Xfce": 76060,
+        "Xfce-JP": 76061,
+        "Source Code": null,
+        "disabled": false,
+        "disabled-edition": [
+            "Source Code"
+        ]
+    }
+}
diff --git a/alter/index.html b/alter/index.html
new file mode 100644 (file)
index 0000000..4dd1542
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0, user-scalable=no">
+    <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
+    <title id="meta_title"></title>
+
+    <meta name="twitter:card" content="summary_large_image">
+    <meta name="twitter:site" content="@Hayao0819">
+    <meta property="og:url" content="http://hayao.fascode.net/alter/index.html">
+    <meta property="og:title" content="Alter Linux Alpha Release Aplha版配布サイト">
+    <meta property="og:description" content="Alter LinuxのAlphaリリースのイメージファイルや過去のリリースのイメージファイルをダウンロードできるサイトです。">
+</head>
+<body class="text-white leading-5 flex flex-col min-h-screen">
+    <header>
+        <div id="header_container" class="containe px-8 font-bold">
+            <div class="flex justify-between items-center md:py-4 py-2">
+                <!-- ここから メニューバー-->
+                <div id="menu_button" class="md:hidden">
+                    <button>
+                        <svg class="h-6 w-6 fill-current" viewBox="0 0 24 24">
+                            <path d="M24 6h-24v-4h24v4zm0 4h-24v4h24v-4zm0 8h-24v4h24v-4z" id="menubutton">
+                        </svg>                       
+                    </button>
+                </div>
+                <h1 class="md:text-xl text-sm p-1" id="header_title"></h1>
+            </div>
+
+            <div>
+                <p class="p-1 text-sm md:hidden">Aplha版配布サイト</p>
+                <p class="p-1 text-sm md:block hidden">Alter LinuxのAplha版を配布しているサイトです</p>
+            </div>
+            
+            <div id="menu" class="hidden md:block py-2">
+                <ul class="md:flex flex-wrap">
+                    <li><a href="#about-alterlinux">Alter Linuxとは</a></li>
+                    <li><a href="#warning">注意点</a></li>
+                    <li><a href="#usage">使い方</a></li>
+                    <li><a href="#download">ダウンロード</a></li>
+                    <li><a href="#official">公式サイト</a></li>
+                    <li><a href="#issue">バグ報告について</a></li>
+                    <li><a href="#source">主な技術と仕様</a></li>
+                    <li><a href="#developer">開発者について</a></li>
+                </ul>
+            </div>
+        </div>
+        <!-- メニューバー ここまで -->
+
+        
+    </header>
+
+    <main>
+        <div class="h-screen p-3 flex-grow" id="main">
+            <script>
+                //for (i=1; i<=10; i++){ document.getElementById("main").insertAdjacentHTML("afterbegin", "<p>Hello</p>"); }
+            </script>
+            
+
+            <h2><a name="about-alterlinux">Alter Linuxとは</a></h2>
+            <p>日本で開発されているArch Linuxをベースとしたディストリビューションです。GUIでインストール作業を完結させることができます。</p>
+            <p>オーディオやコマンドラインの細かい部分にこだわりがあるのが特徴です。64bitと32bitの両方がサポートされています。</p>
+
+            <h2><a name="warning">注意点</a></h2>
+            <p>このサイトからダウンロードできるのは、まだ開発中のベータ版です。通常はFascode Network内部で検証するためにのみ使用されます。</p>
+            <p>これらはすべてGNU General Public Licenseのもとで利用可能です。このソフトウェアの使用によって生じた損害は一切補償できません。</p>
+            <p>このサイトで配布されているものはGNU General Public Licenseが許可する限り自由に再配布、再使用が可能です。</p>
+            <p>また、このサイトは関係者のためのサイトです。一般のユーザーの方は公式サイトからダウンロードすることをおすすめいたします。</p>
+
+            <h2><a name="usage">使い方</a></h2>
+            <p>まず、リリース番号を選択してください。リリース番号は基本的に日付になっています。</p>
+            <p>リリース番号が選択されると、それに対応したエディション一覧が表示されますので、その中からダウンロードしたい物を選択してください。</p>
+            <p>するとダウンロードボタンが表示されるのでクリックしてください。OSDNの配布ページにジャンプするので、そこから必要なファイルをダウンロードしてください。</p>
+            
+            <h2><a name="download">ダウンロード</a></h2>
+            <p>以下のフォームのダウンロードリンクは<a href="http://localhost/alter/alterlinux.json" class="hover:underline">こちらのJSON</a>に基づいて構成されています。</p>
+            <p>
+                <form id="downloadform">
+
+                    <!-- リリース番号 -->
+                    <div class="flex justify-center items-center">
+                        <h3>リリース番号</h3>
+                        <select id="releaseidform" name="releaseidform">
+                            <option value="None" selected>選択してください</option>
+                        </select>
+                    </div>
+
+                    <!-- エディション -->
+                    <div class="flex justify-center items-center" id="editionform_div">
+                        <h3>エディション</h3>
+                        <select id="editionform" name="editionform"></select>
+                    </div>
+
+                    <!-- メッセージ表示 -->
+                    <div class="flex justify-center items-center">
+                        <p id="message"></p>
+                    </div>
+
+                    <!-- ダウンロードボタン -->
+                    <div class="flex justify-center items-center">
+                        <h3 class="w-4/5 text-center cursor-pointer hidden" id="downloadbutton">ダウンロード</h3>
+                    </div>
+                </form>
+            </p>
+
+            <h2><a name="official">公式サイト</a></h2>
+            <div class="flex justify-center items-center">
+                <h3><a href="https://fascode.net/">Fascode Network</a></h3>
+                <h3><a href="https://alter.fascode.net/">Alter Linux</a></h3>
+                <h3><a href="https://serene.fascode.net/">Serene Linux</a></h3>
+                <h3><a href="https://twitter.com/Fascode_JP">公式twitterアカウント</a></h3>
+                <h3><a href="https://fascode.net/social">その他のFascodeの関連サイト</a></h3>
+            </div>
+
+            <h2><a name="issue">バグ報告について</a></h2>
+            <p>このサイトで配布されているAlter Linuxは開発途中のものです。バグがあった場合は是非報告をお願いします。</p>
+            <p>Fascoderの方はMattermost内で最初に<code>@hayao0819</code>をつけて報告してください。それ以外の利用者の方は<a href="https://github.com/FascodeNet/alterlinux/issues">GitHubのIssue</a>から報告を行ってください。</p>
+            <p>バグ報告を行う際にはダウンロードしたイメージファイルのファイル名とPC環境を必ず伝えてください(ファイル名だけで様々な情報がわかります)</p>
+            <p>また、報告前にダウンロードしイメージファイルが破損していないかどうかを確認してください。仮想環境ではなく実機の場合、GPUやサウンドボードなどの詳細を伝えてください。</p>
+            <p>報告後は放置するのではなく、開発者がさらなる質問をする場合があるので定期的にチェックしてください。</p>
+
+            <h2><a name="source">主な技術と仕様</a></h2>
+            <p>Alter Linuxは主にArch Linux上で動作するシェルスクリプトで記述されています。ソースコードはGNU General Public Licenseのもとですべて<a href="https://github.com/FascodeNet/alterlinux">GitHub</a>上で公開されています。</p>
+            <p>イメージファイルに書かれているハッシュをもとにどの時点のソースコードでビルドされたのかわかるようになっています。<code>build.sh</code>を中心にビルドを行いますが、リリース用のビルドは<code>sudo make</code>を実行します。</p>
+            <p>それぞれのエディションの設定は<code>channels</code>以下に配置されています。ソースコードの詳細やビルド方法についてはREADMEからそれぞれのドキュメントを参照してください。</p>
+            <p>上流の仕様の変更により過去の古いソースコードはビルドできない可能性があります。開発に参加したい場合は気軽にプルリクエストを送信してください。(よほどのことがない限りマージします。)</p>
+            <p>過去に<a href="https://github.com/FascodeNet/alterlinux/graphs/contributors">19人もの人</a>がAlter Linuxの開発に貢献してくれました。ありがとうございます。</p>
+
+
+            <h2><a name="developer">開発者について</a></h2>
+            <p>田舎の高校生です。</p>
+            <p>何かありましたら<a href="https://twitter.com/Hayao0819">Twitterアカウント</a>までお願いします。</p>
+        
+            <footer>
+                <p>&copy Fascode Network 2021 Yamada Hayao </p>
+            </footer>    
+        </div>
+    </main>
+    
+
+
+    <script type="text/javascript" src="./Config.js"></script>
+    <script type="text/javascript" src="./Define.js"></script>
+    <script type="text/javascript" src="./Title.js"></script>
+    <script type="text/javascript" src="./HTMLClass.js"></script>
+    <script type="text/javascript" src="./Menu.js"></script>
+    <script type="text/javascript" src="./Header.js"></script>
+    <script type="text/javascript" src="./Download.js"></script>
+</body>
+</html>
diff --git a/alteriso-options-generator/LICENSE b/alteriso-options-generator/LICENSE
new file mode 100644 (file)
index 0000000..f288702
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/alteriso-options-generator/favicon.ico b/alteriso-options-generator/favicon.ico
new file mode 100644 (file)
index 0000000..6e369df
Binary files /dev/null and b/alteriso-options-generator/favicon.ico differ
diff --git a/alteriso-options-generator/index.php b/alteriso-options-generator/index.php
new file mode 100644 (file)
index 0000000..cec5426
--- /dev/null
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>AlterISO3 ビルドオプション ジェネレータ</title>
+        <link rel="stylesheet" href="mobile.css" media="screen and (max-width:830px)">
+        <link rel="stylesheet" href="pc.css" media="screen and (min-width:830px)">
+        <meta name="viewport" content="width=device-width,initial-scale=1">
+        <link rel="shortcut icon" href="./favicon.ico" type="image/vnd.microsoft.icon">
+        <meta name="twitter:card" content="summary">
+        <meta name="twitter:site" content="@Hayao0819">
+        <meta name="twitter:title" content="AlterISO3 ビルドオプション ジェネレータ">
+        <meta name="twitter:description" content="AlterISO3のビルドオプションを生成するサイト。ハヤオがJSとかPHPとか覚えるために作った。">
+        <meta name="twitter:image" content="https://fascode.net/projects/linux/alter/img/AlterV5-Logo-Colored-WhiteText-vector.svg">
+        <meta name="twitter:url" content="http://hayao.fascode.net/alteriso-options-generator/index.php">
+        <style>
+            .hide_debug{
+                display: none;
+            }
+        </style>
+    </head>
+    <body>
+        <header ondblclick="clicked_header()">
+            <h1>AlterISO3 ビルドオプション ジェネレータ</h1>
+            <p>AlterISO3のスクリプトのオプションを生成します。</p>
+            <p>ハヤオがCSSとJSを勉強するための副産物でしかないのでいつ更新やめるか不明。</p>
+            <p><b>このサイトはハヤオが勉強目的で作っています。改善点等があったら<a href="https://twitter.com/Hayao0819" target="_blank">Twitter</a>までお願いします。</b></p>
+        </header>
+
+        
+        <main>
+            <form method="POST">
+                <h2>ビルド設定</h2>
+
+                <div class="option_box">
+
+                    <!-- Plymouth ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>Plymouth</h3></p>
+                        <p class="option_description">有効にすると起動時にアニメーションを表示します</p>
+                        <p class="option_form">
+                            <label for="plymouth_enable"><input type="radio" name="plymouth" value="enable" id="plymouth_enable" checked>有効</label>
+                            <label for="plymouth_disable"><input type="radio" name="plymouth" value="disable" id="plymouth_disable">無効</label>
+                        </p>
+                    </div>
+                    <!-- Plymouth ここまで-->
+
+                    <!-- クリーニング ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>クリーニング</h3></p>
+                        <p class="option_description">ビルド中に不要なファイルを削除します</p>
+                        <p class="option_form">
+                            <label for="clean_enable"><input type="radio" name="clean" value="enable" id="clean_enable" checked>有効</label>
+                            <label for="clean_disable"><input type="radio" name="clean" value="disable" id="clean_disable">無効</label>
+                        </p>
+                    </div>
+                    <!-- クリーニング ここまで-->
+
+                    <!-- tarball ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>Tarball</h3></p>
+                        <p class="option_description">Tarball形式でビルドします</p>
+                        <p class="option_form">
+                            <label for="tarball_enable"><input type="radio" name="tarball" value="enable" id="tarball_enable">有効</label>
+                            <label for="tarball_disable"><input type="radio" name="tarball" value="disable" id="tarball_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <!-- tarball ここまで-->
+
+
+
+                    <!-- アーキテクチャ ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>アーキテクチャ</h3></p>
+                        <p class="option_description">ビルドするアニメーションを指定します</p>
+                        <p class="option_form">
+                            <select name="architecture" id="architecture" onchange="kernelMain()">
+                                <option value="i686">i686</option>
+                                <option value="x86_64" selected>x86_64</option>
+                            </select>
+                        </p>
+                    </div>
+                    <!-- アーキテクチャ ここまで-->
+
+
+                    <!-- 圧縮設定 ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>Squashfsの圧縮方式</h3></p>
+                        <p class="option_description">Rootfsの圧縮方式を指定します</p>
+                        <p class="option_form">
+                              <select name="sfs-comp-type" id="sfs-comp-type">
+                                <option value="gzip">gzip</option>
+                                <option value="lzma">lzma</option>
+                                <option value="lzo">lzo</option>
+                                 <option value="lz4">lz4</option>
+                                <option value="xz">xz</option>
+                                <option value="zstd" selected>zstd</option>
+                            </select>
+                        </p>
+                    </div>
+                    <!-- 圧縮設定 ここまで-->
+
+                    <!-- カーネル ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>カーネル</h3></p>
+                        <p class="option_description">使用するカーネルを設定します</p>
+                        <p class="option_form">
+                            <select name="kernel" id="kernel">
+                                <option disabled selected>アーキテクチャを選択してください</option>
+                            </select>
+                        </p>
+
+                    </div>
+                    <!-- カーネル ここまで-->
+
+                    <!-- ユーザー ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>ライブ環境ユーザー名</h3></p>
+                        <p class="option_description">ライブ環境のユーザー名を指定します</p>
+                        <p class="option_form"><input type="text" id="username" placeholder="alter" value="alter"></p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>ライブ環境パスワード</h3></p>
+                        <p class="option_description">ライブ環境のユーザーのパスワードを設定します</p>
+                        <p class="option_form"><input type="password" id="password" placeholder="alter" value="alter"></p>
+                    </div>
+                    <!-- ユーザー ここまで-->
+
+                    <!-- チャンネル ここから-->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>チャンネル</h3></p>
+                        <p class="option_description">
+                            ビルドするチャンネルを指定します。
+                            <br>
+                            <span style="color: red;">この項目は必須です。</span>
+                        </p>
+                        <p class="option_form">
+                            <input type="text" id="channel" placeholder="xfce" list="channel_list">
+                            <datalist id="channel_list">
+                            </datalist>
+                        </p>
+                        <script>
+                            var channel_list = ['basic', 'cinnamon', 'deepin', 'gnome', 'gnome-mac', 'i3', 'lxde', 'plasma', 'releng', 'xfce', 'xfce-pro']
+                            channel_list.forEach(function (_channel){
+                                var _option_channel = document.createElement('option');
+                                _option_channel.value = _channel;
+                                document.getElementById("channel_list").appendChild(_option_channel);
+                            });
+                        </script>
+                    </div>
+                    <!-- チャンネル ここまで-->
+                </div>
+                
+                <h2>デバッグ用オプション</h2>
+                <label for="show_debug">
+                    <input type="checkbox" name="show_debug" id="show_debug" onclick="switch_debug()">
+                    デバッグ用オプションを表示する
+                </label>
+
+                <div id="debug_box" class="option_box hide_debug">
+                    <!-- デバッグ用オプション ここから -->
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>Shell版のmkalteriso</h3></p>
+                        <p class="option_description">C++版の代わりにShell版のmkalterisoを使用します。</p>
+                        <p class="option_form">
+                            <label for="shmkalteriso_enable"><input type="radio" name="shmkalteriso" value="enable" id="shmkalteriso_enable">有効</label>
+                            <label for="shmkalteriso_disable"><input type="radio" name="shmkalteriso" value="disable" id="shmkalteriso_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>Gitバージョン</h3></p>
+                        <p class="option_description">Gitのリビジョン番号をバージョン情報に含めます。</p>
+                        <p class="option_form">
+                            <label for="gitversion_enable"><input type="radio" name="gitversion" value="enable" id="gitversion_enable">有効</label>
+                            <label for="gitversion_disable"><input type="radio" name="gitversion" value="disable" id="gitversion_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>デバッグメッセージ</h3></p>
+                        <p class="option_description">デバッグメッセージを表示します</p>
+                        <p class="option_form">
+                            <label for="debug_enable"><input type="radio" name="debug" value="enable" id="debug_enable">有効</label>
+                            <label for="debug_disable"><input type="radio" name="debug" value="disable" id="debug_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>スクリプトデバッグ</h3></p>
+                        <p class="option_description">Bashのデバッグメッセージを表示します</p>
+                        <p class="option_form">
+                            <label for="bash_debug_enable"><input type="radio" name="bash_debug" value="enable" id="bash_debug_enable">有効</label>
+                            <label for="bash_debug_disable"><input type="radio" name="bash_debug" value="disable" id="bash_debug_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>メッセージデバッグ</h3></p>
+                        <p class="option_description">メッセージ表示をデバッグします</p>
+                        <p class="option_form">
+                            <label for="msg_debug_enable"><input type="radio" name="msg_debug" value="enable" id="msg_debug_enable">有効</label>
+                            <label for="msg_debug_disable"><input type="radio" name="msg_debug" value="disable" id="msg_debug_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <div class="option_box_child">
+                        <p class="option_title"><h3>AURパッケージをインストールしない</h3></p>
+                        <p class="option_description">AURのパッケージのビルドやインストールをスキップします。</p>
+                        <p class="option_form">
+                            <label for="noaur_enable"><input type="radio" name="noaur" value="enable" id="noaur_enable">有効</label>
+                            <label for="noaur_disable"><input type="radio" name="noaur" value="disable" id="noaur_disable" checked>無効</label>
+                        </p>
+                    </div>
+                    <!-- デバッグ用オプション ここまで -->
+
+                </div>
+
+
+                <div class="result_box">
+                    <div class="result_box_child">
+                        <h2>実行</h2>
+                        <p>このジェネレータでは引数はデフォルト値ではない場合のみ指定するようになっています。</p>
+                        <textarea id="output" disabled></textarea><br>
+                        <label for="only_no_default"><input name="only_no_default" type="checkbox" id="only_no_default">デフォルトの値も引数で指定する。</label>
+                        <label for="allow_no_channel"><input name="allow_no_channel" type="checkbox" id="allow_no_channel">チャンネルの省略を許可する。</label>
+                        <input type="button" value="生成" onclick="startgen()">
+                        <input type="button" value="コピー" onclick="copy_to_clipboard()">
+                        <input type="button" value="ツイートする" onclick="tweetArguments()">
+                    </div>
+                
+                    <div class="result_box_child">
+                        <h2>ログ</h2>
+                        <p>このジェネレータのログです。</p>
+                        <textarea id="generator-output"" disabled></textarea>
+                        <input type="button" value="ログをリセット" onclick="log_clear()">
+                        <label for="log_clear_noconfirm"><input name="log_clear_noconfirm" type="checkbox" id="log_clear_noconfirm">確認メッセージを表示しない</label>
+                        <label for="log_nosave" onclick="clicked_log_nosave()"><input name="log_nosave" type="checkbox" id="log_nosave">ログを保存しない</label>
+                    </div>
+                </div>
+            </form>
+        </main>
+        
+        
+
+        <footer onclick="clicked_footer()">
+                <div style="text-align: left; float: left;">
+                    GPLv3でライセンスされてます <a href="https://github.com/Hayao0819/hayao.fascode.net/tree/master/alteriso-options-generator" target="_blank">ソースコード</a>
+                </div>
+                <div style="text-align: right;">
+                    Fascode Network Yamada Hayao
+                </div>
+        </footer>
+
+        <script type="text/javascript" src="main.js"></script>
+        <script type="text/javascript" src="kernellist.js"></script>
+    </body>
+
+</html>
\ No newline at end of file
diff --git a/alteriso-options-generator/kernellist.js b/alteriso-options-generator/kernellist.js
new file mode 100644 (file)
index 0000000..07e6c31
--- /dev/null
@@ -0,0 +1,66 @@
+//var _Architecture = document.getElementById("architecture").value
+//if (_Architecture = "x86_64") {
+//    var _option = document.createElement('option');
+//    _option.text = "linux-lqx";
+//    _option.value = "lqx";
+//    document.getElementById("kernel").appendChild(_option);
+//}
+
+// 参考
+// https://techacademy.jp/magazine/27133
+// https://techacademy.jp/magazine/22315
+// 
+
+
+kernelMain();
+
+
+function createKernelList(_kernel) {
+    
+    var _option = document.createElement('option');
+
+    if ( _kernel == "core") {
+        _option.text = "linux";
+        _option.value = "core";
+        _option.id = "core"
+    } else {
+        _option.text = "linux-" + _kernel;
+        _option.value = _kernel;
+        _option.id = _kernel;
+    }
+
+    //console.log(_option);
+    //console.log(_kernel);
+    document.getElementById("kernel").appendChild(_option);
+    
+}
+
+function createListAny() {
+    createKernelList("core");
+    createKernelList("lts");
+    createKernelList("zen");
+}
+
+function createListx86_64() {
+    createKernelList("hardened");
+    createKernelList("lqx");
+    createKernelList("ck");
+    createKernelList("rt");
+    createKernelList("rt-lts");
+    createKernelList("xanmod");
+    createKernelList("xanmod-lts");
+    createKernelList("zen-letsnote");
+}
+
+function kernelMain() {
+
+    document.getElementById("kernel").innerHTML = "";
+
+    createListAny();
+    var _Architecture = document.getElementById("architecture").value;
+    if (_Architecture == "x86_64") {
+        createListx86_64();
+    }
+
+    document.getElementById("zen").selected = true;;
+}
diff --git a/alteriso-options-generator/main.js b/alteriso-options-generator/main.js
new file mode 100644 (file)
index 0000000..4149660
--- /dev/null
@@ -0,0 +1,310 @@
+
+var ARGUMENTS = "" ;
+var ONLY_NO_DEFAULT = true ;
+var ALLOW_NO_CHANNEL = false ;
+var INITIAL_LOG = "Welcome to generator!";
+document.getElementById("log_nosave").checked = false;
+window.onload = Initialize();
+
+function Initialize() {
+    // デフォルトではない設定のみ引数で指定する
+    // ローカルのログを復元する
+    document.getElementById("generator-output").value = localStorage.getItem('Logs');
+    
+    // クリック回数をリセット
+    sessionStorage.setItem("click_title", "0");
+    
+    // nosaveの値を保存する
+    //参考 https://kimizuka.hatenablog.com/entry/2015/07/25/000000
+    if (localStorage.getItem("nosave") == "true") {
+        document.getElementById("log_nosave").checked = true;
+    } else if (localStorage.getItem("nosave") == null) {
+        localStorage.setItem("nosave", false);
+    }
+
+    // Logの初期値を設定
+    if (localStorage.getItem("Logs") == null){
+        //localStorage.setItem("Logs", INITIAL_LOG);
+        document.getElementById("generator-output").value = INITIAL_LOG;
+    }
+
+}
+
+
+function writeLog(_msg) {
+    var _log_box = document.getElementById("generator-output");
+    if (localStorage.getItem("Logs") == INITIAL_LOG) {
+        localStorage.removeItem("Logs");
+    }
+    if (_log_box.value == INITIAL_LOG) {
+        _log_box.value = "";
+    }
+
+    // 参考 https://www.sejuku.net/blog/30171
+    var _time = new Date();
+    var _log_date = _time.getFullYear() + "/" + Number(_time.getMonth() + 1) + "/" + _time.getDate() + " " + _time.getHours() + ":" + _time.getMinutes() + ":" + _time.getSeconds();
+    // console.log (_log_date);
+    _log_box.value = "\n" + "[" + _log_date + "]" + _msg +_log_box.value;
+
+    // 参考 https://www.granfairs.com/blog/staff/local-storage-01
+    if (localStorage.getItem("nosave") == "false") {
+        localStorage.setItem('Logs', _log_box.value);
+    }
+}
+
+
+function writeErr(_msg) {
+    writeLog(_msg);
+    document.getElementById('output').value = "エラーが発生しました。ログを参照して下さい。";
+}
+
+function getPlymouth(){
+    var _IsPlymouth = document.getElementById("plymouth_enable");
+    if (_IsPlymouth.checked) {
+        ARGUMENTS = ARGUMENTS + " -b";
+    }
+}
+
+function getClean () {
+    var _IsClean = document.getElementById("clean_enable");
+    if (_IsClean.checked) {
+        ARGUMENTS = ARGUMENTS + " -e"
+    }
+}
+
+function getTarball () {
+    var _IsTarball = document.getElementById("tarball_enable");
+    if (_IsTarball.checked) {
+        ARGUMENTS = ARGUMENTS + " --tarball";
+    }
+}
+
+function getArchitecture () {
+    var _Architecture = document.getElementById("architecture").value;
+
+    if (_Architecture != "") {
+        if (ONLY_NO_DEFAULT == false || _Architecture != "x86_64") {
+            ARGUMENTS = ARGUMENTS + " -a \"" + _Architecture + "\"";
+        }
+    }
+}
+
+function getCompType () {
+    var _Comptype = document.getElementById('sfs-comp-type').value;
+    if (_Comptype != "") {
+        if (_Comptype != "zstd" || ONLY_NO_DEFAULT == false) {
+            ARGUMENTS = ARGUMENTS + " -c \"" + _Comptype + "\"";
+        }
+    }
+}
+
+function getKernel () {
+    var _Kernel = document.getElementById("kernel").value;
+    if(_Kernel != "") {
+        if (_Kernel != "zen" || ONLY_NO_DEFAULT == false) {
+            ARGUMENTS = ARGUMENTS + " -k \"" + _Kernel + "\"";
+        }
+    }
+}
+
+function getUsername (){
+    var _Username = document.getElementById("username").value;
+    // console.log(_Username);
+    if (_Username != "" ) {
+        if (_Username != "alter" || ONLY_NO_DEFAULT == false) {
+            ARGUMENTS = ARGUMENTS + " -u \"" + _Username + "\"";
+        }
+    }
+}
+
+function getPassword (){
+    var _Password = document.getElementById("password").value;
+    //console.log(_Password);
+    if (_Password != "" ) {
+        if (_Password != "alter" || ONLY_NO_DEFAULT == false ) { 
+            ARGUMENTS = ARGUMENTS + " -p \"" + _Password + "\"";
+        }
+    }
+}
+
+function getDebug () {
+    var _IsDebug = document.getElementById("debug_enable");
+    if (_IsDebug.checked) {
+        ARGUMENTS = ARGUMENTS + " -d"
+    }
+}
+
+function getBashDebug () {
+    var _IsBashDebug = document.getElementById("bash_debug_enable");
+    if (_IsBashDebug.checked) {
+        ARGUMENTS = ARGUMENTS + " -x";
+    }
+}
+
+function getGitversion () {
+    var _IsGetversion = document.getElementById("gitversion_enable");
+    if (_IsGetversion.checked) {
+        ARGUMENTS = ARGUMENTS + " --gitversion";
+    }
+}
+
+function getShmkalteriso () {
+    var _IsShmkalteriso = document.getElementById("shmkalteriso_enable");
+    if (_IsShmkalteriso.checked) {
+        ARGUMENTS = ARGUMENTS + " --shmkalteriso";
+    }
+}
+
+function getMsgDebug () {
+    var _IsMsgDebug = document.getElementById("msg_debug_enable");
+    if (_IsMsgDebug.checked) {
+        ARGUMENTS = ARGUMENTS + " --msgdebug";
+    }
+}
+
+function getNoAur () {
+    var _IsNoAur = document.getElementById("noaur_enable");
+    if (_IsNoAur.checked) {
+        ARGUMENTS = ARGUMENTS + " --noaur";
+    }
+}
+
+
+function getChannel() {
+    var _Channel = document.getElementById("channel").value;
+    console.log(document.getElementById("channel").value);
+    ARGUMENTS = ARGUMENTS + ' ' + _Channel;
+}
+
+function startgen() {
+    // 初期化
+    ARGUMENTS = ""
+
+    if (document.getElementById("only_no_default").checked) {
+        ONLY_NO_DEFAULT = false;
+    } else {
+        ONLY_NO_DEFAULT = true;
+    }
+
+    if (document.getElementById("allow_no_channel").checked) {
+        ALLOW_NO_CHANNEL = true;
+    } else {
+        ALLOW_NO_CHANNEL = false;
+    }
+
+
+    getPlymouth();
+    getClean();
+    getTarball();
+    getArchitecture();
+    getCompType();
+    getKernel();
+    getUsername();
+    getPassword();
+    getShmkalteriso();
+    getGitversion();
+    getDebug();
+    getBashDebug();
+    getMsgDebug();
+    getNoAur();
+
+    // チャンネル取得
+    getChannel();
+    
+    // 出力
+    document.getElementById('output').innerHTML = "";
+    if (ARGUMENTS == "") {
+        writeLog ("引数は必要ありません");
+    } else if ( ! document.getElementById("channel").value && ALLOW_NO_CHANNEL == false ) {
+        writeErr ("チャンネルを指定して下さい。");
+    } else {
+        document.getElementById('output').value = ARGUMENTS;
+        writeLog( "「" + ARGUMENTS + "」を生成しました");
+    }
+}
+
+function copy_to_clipboard() {
+    var output_value = document.getElementById("output").value;
+
+    if (output_value == ""){
+        writeErr ("コピーするものがありません");
+    } else if (output_value == "エラーが発生しました。ログを参照して下さい。") {
+        writeErr ("エラーメッセージはコピーできません")
+    } else {
+        //参考 https://qiita.com/butakoma/items/642c0ec4b77f6bb5ebcf#clipboardeventclipboarddataを使う方法
+
+        var listener = function(e){
+        
+            e.clipboardData.setData("text/plain" , output_value);    
+            // 本来のイベントをキャンセル
+            e.preventDefault();
+            // 終わったら一応削除
+            document.removeEventListener("copy", listener);
+        }
+
+        document.addEventListener("copy" , listener);
+        document.execCommand("copy");
+
+        writeLog("「" + output_value + "」" + "をクリップボードにコピーしました!");
+    }
+}
+
+function log_clear() {
+    function _run_clear_log() {
+        document.getElementById("generator-output").value = "";
+        localStorage.removeItem("Logs");
+    }
+
+    if ( document.getElementById("log_clear_noconfirm").checked == true || confirm("ログを削除します。よろしいですか?") == true) {
+        _run_clear_log();
+    }
+}
+
+function clicked_header() {
+    // 参考 https://pinkmonky.net/detail/?id=61
+    sessionStorage.setItem("click_title", parseInt(sessionStorage.getItem("click_title")) + 1);
+
+    // console.log(sessionStorage.getItem("click_title"));
+    if (sessionStorage.getItem("click_title") == 1 ) {
+        document.getElementsByTagName("footer")[0].innerHTML = "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ";
+    } else if (sessionStorage.getItem("click_title") >= 2) {
+        // 参考 https://techacademy.jp/magazine/22404
+        location.href = "https://www.madoka-magica.com/tv/";
+    }
+}
+
+function clicked_footer() {
+    if (document.getElementsByTagName("footer")[0].innerHTML == "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ") {
+        location.href = "https://magireco.com/";
+    }
+}
+
+//openTwitter(投稿文、シェアするURL、提供元アカウント)
+//参考 https://santmove.com/info.php?info_id=31
+function tweetArguments() {
+    var output_value = document.getElementById("output").value;
+
+    if ( output_value == "") {
+        writeErr ("引数が生成されていないのでツイートできません。");
+    } else {
+        var url = location.href
+        var account = "Fascode_SPT"
+        var _tweet_text = "AlterISOのビルドオプション「"+output_value+"」を作成しました。"
+        window.open("https://twitter.com/intent/tweet?text="+_tweet_text+"&via="+account+"&url="+url, '_blank');
+    }
+}
+
+function clicked_log_nosave() {
+    localStorage.setItem("nosave", document.getElementById("log_nosave").checked);
+}
+
+function switch_debug() {
+    var _checkbox = document.getElementById("show_debug");
+    var _debug = document.getElementById("debug_box");
+    if ( _checkbox.checked ) {
+        _debug.classList.remove("hide_debug");
+    } else {
+        _debug.classList.add("hide_debug");
+    }
+}
+
diff --git a/alteriso-options-generator/mobile.css b/alteriso-options-generator/mobile.css
new file mode 100644 (file)
index 0000000..0dda3ef
--- /dev/null
@@ -0,0 +1,33 @@
+label, input[type='checkbox'] {
+    cursor: pointer;
+    user-select: none;
+}
+
+html {
+    font-size: smaller;
+}
+
+header {
+    border: 1px black solid;
+    margin-bottom: 1%;
+    text-align: center;
+}
+
+main {
+    border: 1px black solid;
+    padding-left: 2%;
+    padding-right: 2%;
+}
+
+.result_box_child {
+    width: 100%;
+}
+
+textarea {
+    text-align: center;
+    resize: none;
+    width: 100%;
+    height: 10em;
+}
+
+
diff --git a/alteriso-options-generator/pc.css b/alteriso-options-generator/pc.css
new file mode 100644 (file)
index 0000000..3d2a5e8
--- /dev/null
@@ -0,0 +1,65 @@
+label, input[type='checkbox'] {
+    cursor: pointer;
+    user-select: none;
+}
+
+html {
+    padding-bottom: 0%;
+    padding-right: 5%;
+    padding-left: 5%;
+}
+
+header {
+    border: 1px black solid;
+    margin-bottom: 1%;
+    text-align: center;
+}
+
+main {
+    border: 1px black solid;
+    padding: 2%;
+}
+
+select, input[type="text"], input[type="password"]{
+    width: 100%;
+}
+
+.option_title {
+    width: 25%;
+    width: 100%;
+}
+
+.option_box {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-around;
+    align-items: center;
+    width: 100%;
+}
+
+.option_box_child {
+    /* flex-basis: 15%; */
+    flex-grow: 1;
+    max-width: 20%;
+    min-width: 15%;
+    padding: 1%;
+}
+
+.result_box {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-around;
+    align-items: center;
+    width: 100%;
+}
+
+.result_box_child {
+    width: 40%;
+    padding: 1%;
+}
+
+textarea {
+    resize: none;
+    width: 100%;
+    height: 10em;
+}
\ No newline at end of file
diff --git a/blog/.gitignore b/blog/.gitignore
new file mode 100644 (file)
index 0000000..364fdec
--- /dev/null
@@ -0,0 +1 @@
+public/
diff --git a/blog/archetypes/default.md b/blog/archetypes/default.md
new file mode 100644 (file)
index 0000000..00e77bd
--- /dev/null
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/blog/config.toml b/blog/config.toml
new file mode 100644 (file)
index 0000000..c9e90f1
--- /dev/null
@@ -0,0 +1,4 @@
+baseURL = 'http://example.org/'
+languageCode = 'ja-JP'
+title = 'ハヤオのブログ'
+theme = "smigle"
diff --git a/blog/content/posts/20211009/index.md b/blog/content/posts/20211009/index.md
new file mode 100644 (file)
index 0000000..55b2c9d
--- /dev/null
@@ -0,0 +1,11 @@
+---
+title: "最初の投稿"
+date: 2021-10-09T21:10:53+09:00
+draft: true
+---
+
+ハヤオのブログをHugoを使って作ってみた。
+
+マークダウンだけでこうやってかけるのシンプルでいいですね。
+
+Fascodeのブログに載せられないものでもこれからちょこちょこ書いていこうかしら()
diff --git a/blog/themes/smigle/LICENSE b/blog/themes/smigle/LICENSE
new file mode 100644 (file)
index 0000000..7df68e7
--- /dev/null
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2021 Ian S. McBride
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/blog/themes/smigle/README.md b/blog/themes/smigle/README.md
new file mode 100644 (file)
index 0000000..305cab7
--- /dev/null
@@ -0,0 +1,66 @@
+# smigle-hugo-theme
+
+A minimalist theme for the static site generator [Hugo][hugo]. This
+theme is shared on Hugo's [official collection of
+themes][theme-collection].
+
+### Features
+- No JavaScript
+- No Google spyware or tracking of any kind
+- No other external dependencies or comment sections
+- Only one local font ([Iosevka][font])
+
+### Demo
+
+https://smigle-hugo-theme.netlify.app/
+
+### Screenshots
+
+![smigle screenshot-1][screenshot-1]
+
+### Installation
+
+From the root of your site:
+```bash
+git submodule add https://gitlab.com/ian-s-mcb/smigle-hugo-theme.git themes/smigle
+```
+
+### Updating
+
+From the root of your site:
+```bash
+git submodule foreach git pull origin main
+```
+
+### Run example site
+
+```bash
+hugo new site mysite -f yaml
+cd mysite
+git init
+git submodule add https://gitlab.com/ian-s-mcb/smigle-hugo-theme themes/smigle
+cd themes/smigle/exampleSite
+hugo server
+```
+
+### Contributing
+Have you found a bug or got an idea for a new feature? Feel free to use
+the [issue tracker][issue-tracker] to let me know. Or make directly a
+[merge request][merge-request].
+
+### Acknowledgements
+
+This theme was created from scratch and influenced by the following two
+Hugo themes:
+
+- [colorchestra's smol][smol-colorchestra]
+- [Sumner Evans's smol][smol-sumner]
+
+[hugo]: https://gohugo.io/
+[theme-collection]: https://themes.gohugo.io/themes/smigle-hugo-theme/
+[screenshot-1]: https://gitlab.com/ian-s-mcb/smigle-hugo-theme/-/raw/main/images/screenshot.png
+[font]: https://github.com/be5invis/iosevka
+[issue-tracker]: https://gitlab.com/ian-s-mcb/smigle-hugo-theme/-/issues
+[merge-request]: https://gitlab.com/ian-s-mcb/smigle-hugo-theme/-/merge_requests
+[smol-sumner]: https://github.com/sumnerevans/smol
+[smol-colorchestra]: https://github.com/colorchestra/smol
diff --git a/blog/themes/smigle/archetypes/default.md b/blog/themes/smigle/archetypes/default.md
new file mode 100644 (file)
index 0000000..6befe91
--- /dev/null
@@ -0,0 +1,7 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ now.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}
+draft: true
+categories:
+  - uncategorized
+---
diff --git a/blog/themes/smigle/exampleSite/config.yaml b/blog/themes/smigle/exampleSite/config.yaml
new file mode 100644 (file)
index 0000000..e370499
--- /dev/null
@@ -0,0 +1,47 @@
+# exampleSite/config.yaml
+baseURL: https://smigle-hugo-theme.netlify.app/ # Replace with your domain
+languageCode: en-us
+theme: smigle
+themesDir: ../.. # Only needed for running the example site
+title: Blog Title
+menu:
+  main:
+    - identifier: home
+      name: Home
+      url: /
+      weight: 1
+    - identifier: about
+      name: About
+      url: /about/
+      weight: 2
+    - identifier: posts
+      name: Posts
+      url: /posts/
+      weight: 3
+    - identifier: categories
+      name: Categories
+      url: /categories/
+      weight: 4
+    - identifier: tags
+      name: Tags
+      url: /tags/
+      weight: 5
+params:
+  abbrDateFmt: "Jan 2"
+  author: "Blog Author"
+  brandIconFile: "images/brandIcon.svg"
+  dateFmt: "2006-01-02"
+#  customStylesheets: # Use to override theme styles, like logo size
+#    - "css/custom.css"
+  social:
+    - name: GitHub
+      url: https://github.com/ian-s-mcb
+    - name: GitLab
+      url: https://gitlab.com/ian-s-mcb
+    - name: Quizlet
+      url: https://quizlet.com/ian-s-mcb
+    - name: Reddit
+      url: https://www.reddit.com/user/ian-s-mcb
+    - name: StackOverflow
+      url: https://stackoverflow.com/users/3417846/ian-s-mcb
+  subtitle: "Description about Blog Author"
diff --git a/blog/themes/smigle/exampleSite/content/about.md b/blog/themes/smigle/exampleSite/content/about.md
new file mode 100644 (file)
index 0000000..a3a950d
--- /dev/null
@@ -0,0 +1,8 @@
+---
+title: About
+layout: default
+---
+
+Ut vitae sagittis tortor. Aliquam euismod vel elit id porttitor. Sed sit amet feugiat urna, quis semper ipsum. Ut vitae ligula ultrices, porttitor ipsum nec, accumsan est. Nunc posuere felis non mauris volutpat interdum. Sed consequat arcu est, eget consequat enim feugiat rhoncus. Nunc sit amet rhoncus libero, venenatis tristique eros. Duis feugiat sem ac eros maximus gravida. Cras mollis vulputate risus, eget tincidunt neque porttitor vitae. Sed sit amet volutpat urna. Aenean ultricies turpis eget porta porttitor.
+
+Duis eget nibh ut nisi blandit pulvinar id vel mauris. Quisque quis magna dapibus, iaculis magna in, semper augue. Donec ullamcorper justo sed dignissim dictum. Sed in purus ac magna ultrices pharetra. Nam id lacus in urna varius euismod at a erat. Cras justo nisl, finibus nec laoreet vitae, ultrices pulvinar velit. Morbi ornare dolor eget pellentesque lobortis. Aliquam consequat tellus erat, at suscipit ipsum ultrices lobortis. Proin malesuada orci in nunc pellentesque volutpat. Phasellus tincidunt suscipit sagittis. Aenean in sodales est. Vivamus eu odio sit amet lacus porttitor venenatis. Nulla elit lectus, convallis ut orci quis, pharetra varius mi. Proin vitae laoreet diam.
diff --git a/blog/themes/smigle/exampleSite/content/posts/emoji-support.md b/blog/themes/smigle/exampleSite/content/posts/emoji-support.md
new file mode 100644 (file)
index 0000000..ea044bf
--- /dev/null
@@ -0,0 +1,48 @@
+---
+author: Hugo Authors
+title: Emoji Support
+date: 2021-01-13
+Lastmod: 2021-08-18
+description: Guide to emoji usage in Hugo
+categories:
+  - syntax
+tags:
+  - emoji
+---
+
+Emoji can be enabled in a Hugo project in a number of ways. 
+<!--more-->
+The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes). 
+
+To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
+
+<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
+<br>
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
+
+***
+
+**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
+
+{{< highlight html >}}
+.emoji {
+  font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+}
+{{< /highlight >}}
+
+{{< css.inline >}}
+<style>
+.emojify {
+       font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+       font-size: 2rem;
+       vertical-align: middle;
+}
+@media screen and (max-width:650px) {
+  .nowrap {
+    display: block;
+    margin: 25px 0;
+  }
+}
+</style>
+{{< /css.inline >}}
diff --git a/blog/themes/smigle/exampleSite/content/posts/markdown-syntax.md b/blog/themes/smigle/exampleSite/content/posts/markdown-syntax.md
new file mode 100644 (file)
index 0000000..a1a2d3c
--- /dev/null
@@ -0,0 +1,149 @@
+---
+author: Hugo Authors
+title: Markdown Syntax Guide
+date: 2021-01-15
+description: >-
+  Sample article showcasing basic Markdown syntax and formatting for HTML
+  elements.
+tags:
+  - markdown
+  - css
+  - html
+categories:
+  - syntax
+series:
+  - Themes Guide
+aliases:
+  - migrate-from-jekyl
+---
+
+This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
+<!--more-->
+
+## Headings
+
+The following HTML `<h1>`—`<h6>` elements represent six levels of section headings. `<h1>` is the highest section level while `<h6>` is the lowest.
+
+# H1
+## H2
+### H3
+#### H4
+##### H5
+###### H6
+
+## Paragraph
+
+Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
+
+Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
+
+## Blockquotes
+
+The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
+
+#### Blockquote without attribution
+
+> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
+> **Note** that you can use *Markdown syntax* within a blockquote.
+
+#### Blockquote with attribution
+
+> Don't communicate by sharing memory, share memory by communicating.<br>
+> — <cite>Rob Pike[^1]</cite>
+
+[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
+
+## Tables
+
+Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
+
+   Name | Age
+--------|------
+    Bob | 27
+  Alice | 23
+
+#### Inline Markdown within tables
+
+| Italics   | Bold     | Code   |
+| --------  | -------- | ------ |
+| *italics* | **bold** | `code` |
+
+## Code Blocks
+
+#### Code block with backticks
+
+```html
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+```
+
+#### Code block indented with four spaces
+
+    <!doctype html>
+    <html lang="en">
+    <head>
+      <meta charset="utf-8">
+      <title>Example HTML5 Document</title>
+    </head>
+    <body>
+      <p>Test</p>
+    </body>
+    </html>
+
+#### Code block with Hugo's internal highlight shortcode
+{{< highlight html >}}
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+{{< /highlight >}}
+
+## List Types
+
+#### Ordered List
+
+1. First item
+2. Second item
+3. Third item
+
+#### Unordered List
+
+* List item
+* Another item
+* And another item
+
+#### Nested list
+
+* Fruit
+  * Apple
+  * Orange
+  * Banana
+* Dairy
+  * Milk
+  * Cheese
+
+## Other Elements — abbr, sub, sup, kbd, mark
+
+<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
+
+H<sub>2</sub>O
+
+X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
+
+Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the session.
+
+Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
diff --git a/blog/themes/smigle/exampleSite/content/posts/math-typesetting.md b/blog/themes/smigle/exampleSite/content/posts/math-typesetting.md
new file mode 100644 (file)
index 0000000..b16e7bb
--- /dev/null
@@ -0,0 +1,51 @@
+---
+author: Hugo Authors
+title: Math Typesetting
+date: 2021-01-12
+description: A brief guide to setup KaTeX
+categories:
+  - syntax
+math: true
+---
+
+Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.
+<!--more-->
+
+In this example we will be using [KaTeX](https://katex.org/)
+
+- Create a partial under `/layouts/partials/math.html`
+- Within this partial reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
+- Include the partial in your templates like so:  
+
+```bash
+{{ if or .Params.math .Site.Params.math }}
+{{ partial "math.html" . }}
+{{ end }}
+```
+
+- To enable KaTex globally set the parameter `math` to `true` in a project's configuration
+- To enable KaTex on a per page basis include the parameter `math: true` in content files
+
+**Note:** Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
+
+{{< math.inline >}}
+{{ if or .Page.Params.math .Site.Params.math }}
+<!-- KaTeX -->
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
+{{ end }}
+{{</ math.inline >}}
+
+### Examples
+
+{{< math.inline >}}
+<p>
+Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
+</p>
+{{</ math.inline >}}
+
+Block math:
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } 
+$$
diff --git a/blog/themes/smigle/exampleSite/content/posts/placeholder-text.md b/blog/themes/smigle/exampleSite/content/posts/placeholder-text.md
new file mode 100644 (file)
index 0000000..751501c
--- /dev/null
@@ -0,0 +1,46 @@
+---
+author: Hugo Authors
+title: Placeholder Text
+date: 2021-01-01
+description: Lorem Ipsum Dolor Si Amet
+categories:
+  - uncategorized
+tags:
+  - markdown
+  - text
+---
+
+Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+# Vagus elidunt
+
+<svg class="canon" xmlns="http://www.w3.org/2000/svg" overflow="visible" viewBox="0 0 496 373" height="373" width="496"><g fill="none"><path stroke="#000" stroke-width=".75" d="M.599 372.348L495.263 1.206M.312.633l494.95 370.853M.312 372.633L247.643.92M248.502.92l246.76 370.566M330.828 123.869V1.134M330.396 1.134L165.104 124.515"></path><path stroke="#ED1C24" stroke-width=".75" d="M275.73 41.616h166.224v249.05H275.73zM54.478 41.616h166.225v249.052H54.478z"></path><path stroke="#000" stroke-width=".75" d="M.479.375h495v372h-495zM247.979.875v372"></path><ellipse cx="498.729" cy="177.625" rx=".75" ry="1.25"></ellipse><ellipse cx="247.229" cy="377.375" rx=".75" ry="1.25"></ellipse></g></svg>
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+## Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
+
+{{< css.inline >}}
+<style>
+.canon { background: white; width: 100%; height: auto; }
+</style>
+{{< /css.inline >}}
diff --git a/blog/themes/smigle/exampleSite/content/posts/rich-content.md b/blog/themes/smigle/exampleSite/content/posts/rich-content.md
new file mode 100644 (file)
index 0000000..e2c136d
--- /dev/null
@@ -0,0 +1,35 @@
+---
+author: Hugo Authors
+title: Rich Content
+date: 2021-01-14
+description: A brief description of Hugo Shortcodes
+categories:
+  - syntax
+tags:
+  - shortcodes
+  - privacy
+---
+
+Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
+<!--more-->
+---
+
+## YouTube Privacy Enhanced Shortcode
+
+{{< youtube ZJthWmvUzzc >}}
+
+<br>
+
+---
+
+## Twitter Simple Shortcode
+
+{{< twitter_simple 1085870671291310081 >}}
+
+<br>
+
+---
+
+## Vimeo Simple Shortcode
+
+{{< vimeo_simple 48912912 >}}
diff --git a/blog/themes/smigle/images/screenshot.png b/blog/themes/smigle/images/screenshot.png
new file mode 100644 (file)
index 0000000..89fdb3a
Binary files /dev/null and b/blog/themes/smigle/images/screenshot.png differ
diff --git a/blog/themes/smigle/images/tn.png b/blog/themes/smigle/images/tn.png
new file mode 100644 (file)
index 0000000..fd6cf2b
Binary files /dev/null and b/blog/themes/smigle/images/tn.png differ
diff --git a/blog/themes/smigle/layouts/404.html b/blog/themes/smigle/layouts/404.html
new file mode 100644 (file)
index 0000000..e0443be
--- /dev/null
@@ -0,0 +1,6 @@
+{{ define "main" }}
+       <main>
+    <h1>404 Not Found</h1>
+    <p>Whatever you're looking for, it isn't here.</p>
+       </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/_default/baseof.html b/blog/themes/smigle/layouts/_default/baseof.html
new file mode 100644 (file)
index 0000000..6734a3e
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+  {{ partial "head.html" . }}
+  <body>
+    {{ partial "header.html" . }}
+    <div id="content">
+      {{ block "main" . }}{{ end }}
+    </div>
+    {{ partial "footer.html" . }}
+  </body>
+</html>
diff --git a/blog/themes/smigle/layouts/_default/default.html b/blog/themes/smigle/layouts/_default/default.html
new file mode 100644 (file)
index 0000000..b5e9525
--- /dev/null
@@ -0,0 +1,6 @@
+{{ define "main" }}
+       <main>
+    <h1>{{ .Title }}</h1>
+    {{ .Content }}
+       </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/_default/summary.html b/blog/themes/smigle/layouts/_default/summary.html
new file mode 100644 (file)
index 0000000..ee9041c
--- /dev/null
@@ -0,0 +1,10 @@
+<article>
+  <h1 class="summary-title"><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
+  {{ partial "postMeta.html" . }}
+  <div class="summary-body">
+    <p>{{ .Summary }}</p>
+    {{ if .Truncated }}
+      <a href="{{ .Permalink }}">Read more...</a>
+    {{ end }}
+  </div>
+</article>
diff --git a/blog/themes/smigle/layouts/categories/taxonomy.html b/blog/themes/smigle/layouts/categories/taxonomy.html
new file mode 100644 (file)
index 0000000..b1e473f
--- /dev/null
@@ -0,0 +1,6 @@
+{{ define "main" }}
+  <main id="categories">
+    {{ with .Title }}<h1>{{ "Category: " }}{{ . }}</h1>{{ end }}
+    {{ partial "postsByDate.html" . }}
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/categories/terms.html b/blog/themes/smigle/layouts/categories/terms.html
new file mode 100644 (file)
index 0000000..aef4ed1
--- /dev/null
@@ -0,0 +1,5 @@
+{{ define "main" }}
+  <main id="terms">
+  {{ partial "terms.html" . }}
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/index.html b/blog/themes/smigle/layouts/index.html
new file mode 100644 (file)
index 0000000..cd86013
--- /dev/null
@@ -0,0 +1,9 @@
+{{ define "main" }}
+       <main>
+               {{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
+               {{ range $paginator.Pages }}
+                       {{ .Render "summary" }}
+               {{ end }}
+               {{ partial "pagination.html" . }}
+       </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/partials/footer.html b/blog/themes/smigle/layouts/partials/footer.html
new file mode 100644 (file)
index 0000000..f95427e
--- /dev/null
@@ -0,0 +1,27 @@
+<footer>
+  <hr />
+  {{ if .Site.Params.social }}
+    <p id="social">
+      Find me around the web:
+      <br />
+      {{ range $i, $e := .Site.Params.social }}
+        {{ if $i }} | {{ end }}
+        <a href="{{ .url }}">{{ .name }}</a>
+      {{ end }}
+    </p>
+  {{ end }}
+  <p class="copyright">
+    Copyright © {{ now.Format "2006"}}
+    <a href="{{ .Site.BaseURL }}"><strong>{{ default "Blog Author" .Site.Params.Author }}</strong></a>.
+    This work is licensed under the
+    <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.
+  </p>
+  <p class="builtWith">
+    Built with
+    <a href="http://www.gohugo.io/">Hugo</a>,
+    using the theme
+    <a href="https://gitlab.com/ian-s-mcb/smigle-hugo-theme">smigle</a>,
+    which was influenced by the theme
+    <a href="https://github.com/sumnerevans/smol">smol</a>.
+  </p>
+</footer>
diff --git a/blog/themes/smigle/layouts/partials/head.html b/blog/themes/smigle/layouts/partials/head.html
new file mode 100644 (file)
index 0000000..12e6785
--- /dev/null
@@ -0,0 +1,30 @@
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <meta
+    name="description"
+    content="{{ .Site.Params.description }}"
+  />
+  {{ if (eq .Title .Site.Title) }}
+    {{ with $title := .Title }}
+      <title>{{ . }}</title>
+    {{ end }}
+  {{ else }}
+    {{ with $title := printf "%s | %s" .Title .Site.Title }}
+      <title>{{ . }}</title>
+    {{ end }}
+  {{ end }}
+  <link rel="stylesheet" href="{{ "css/reset.css" | relURL }}"/>
+  <link rel="stylesheet" href="{{ "css/font.css" | relURL }}"/>
+  <link rel="stylesheet" href="{{ "css/smigle.css" | relURL }}"/>
+  {{ range .Site.Params.customStylesheets }}
+    <link rel="stylesheet" href="{{ . | relURL }}"/>
+  {{ end }}
+  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
+  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
+  <link rel="manifest" href="/site.webmanifest">
+  <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
+  <meta name="msapplication-TileColor" content="#da532c">
+  <meta name="theme-color" content="#ffffff">
+</head>
diff --git a/blog/themes/smigle/layouts/partials/header.html b/blog/themes/smigle/layouts/partials/header.html
new file mode 100644 (file)
index 0000000..213f8fe
--- /dev/null
@@ -0,0 +1,23 @@
+<header>
+  <div id="brand">
+    <a class="icon-link" href="{{ .Site.BaseURL }}">
+      <img
+        class="icon"
+        src="{{ default "images/brandIcon.svg" .Site.Params.brandIconFile | relURL }}"
+      />
+    </a>
+    <div class="text">
+      <a href="{{ .Site.BaseURL }}"><h1>{{ .Site.Title }}</h1></a>
+      <h3>{{ default "Description about Blog Author" .Site.Params.subtitle }}</h3>
+    </div>
+  </div>
+  <nav>
+    {{ with .Site.Menus.main }}
+      {{ range $index, $value := . }}
+        {{ if $index }} | {{ end }}
+        <a href="{{ .URL | relURL }}"><b>{{ .Name }}</b></a>
+      {{ end }}
+    {{ end }}
+  </nav>
+  <hr />
+</header>
diff --git a/blog/themes/smigle/layouts/partials/pagination.html b/blog/themes/smigle/layouts/partials/pagination.html
new file mode 100644 (file)
index 0000000..2b34a31
--- /dev/null
@@ -0,0 +1,9 @@
+<div>
+  {{ if .Paginator.HasPrev }}
+    <a href="{{ .Paginator.Prev.URL }}">Previous Page</a>
+  {{ end }}
+  {{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}
+  {{ if .Paginator.HasNext }}
+    <a href="{{ .Paginator.Next.URL }}">Next Page</a>
+  {{ end }}
+</div>
diff --git a/blog/themes/smigle/layouts/partials/postMeta.html b/blog/themes/smigle/layouts/partials/postMeta.html
new file mode 100644 (file)
index 0000000..cce6631
--- /dev/null
@@ -0,0 +1,22 @@
+<div class="post-meta">
+  <strong>
+    <span>Posted on</span>
+    <time>{{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}</time>
+    {{ with .Params.categories }}<span>in</span>{{ end }}
+    {{ range $key, $value := .Params.categories -}}
+      {{- if $key }}, {{ end }}
+      <a href="{{ "/categories/" | relLangURL }}{{ $value | urlize }}">{{ . }}</a>
+    {{- end }}
+  </strong>
+  {{ with .WordCount }}<span> • {{ . }} words</span>{{ end }}
+  {{ with .ReadingTime}}<span> • {{ . }} minute read</span>{{ end }}
+  {{ with .Params.tags }}
+    <div>
+      <span>Tags:</span>
+      {{ range $key, $value := . }}
+        {{- if $key }}, {{ end }}
+        <a href="{{ "/tags/" | relLangURL }}{{ $value | urlize }}">{{ . }}</a>
+      {{- end }}
+    </div>
+  {{ end }}
+</div>
diff --git a/blog/themes/smigle/layouts/partials/postMetaDetailed.html b/blog/themes/smigle/layouts/partials/postMetaDetailed.html
new file mode 100644 (file)
index 0000000..c417c17
--- /dev/null
@@ -0,0 +1,28 @@
+<div class="post-meta">
+  <strong>
+    <span>Posted on</span>
+    <time>{{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}</time>
+    {{ with .Params.categories }}<span>in</span>{{ end }}
+    {{ range $key, $value := .Params.categories -}}
+      {{- if $key }}, {{ end }}
+      <a href="{{ "/categories/" | relLangURL }}{{ $value | urlize }}">{{ . }}</a>
+    {{- end }}
+  </strong>
+  {{ with .WordCount }}<span> • {{ . }} words</span>{{ end }}
+  {{ with .ReadingTime}}<span> • {{ . }} minute read</span>{{ end }}
+  {{ if and .IsPage (ne .Date .Lastmod) }}
+    <div>
+      Last updated on
+      <time>{{ .Lastmod.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}</time>
+    </div>
+  {{ end }}
+  {{ with .Params.tags }}
+    <div>
+      <span>Tags:</span>
+      {{ range $key, $value := . }}
+        {{- if $key }}, {{ end }}
+        <a href="{{ "/tags/" | relLangURL }}{{ $value | urlize }}">{{ . }}</a>
+      {{- end }}
+    </div>
+  {{ end }}
+</div>
diff --git a/blog/themes/smigle/layouts/partials/postsByDate.html b/blog/themes/smigle/layouts/partials/postsByDate.html
new file mode 100644 (file)
index 0000000..a008b3f
--- /dev/null
@@ -0,0 +1,15 @@
+{{ range .Data.Pages.GroupByDate "2006" }}
+  <h3>{{ .Key }}</h3>
+  <ul id="postsByDate">
+    {{ range .Pages }}
+      <li>
+        <div class="date">
+          {{ .Date.Format (default "Jan 2" .Site.Params.abbrDateFmt) }}
+        </div>
+        <div class="title">
+          <a href="{{ .RelPermalink }}">{{.Title }}</a>
+        </div>
+      </li>
+    {{ end }}
+  </ul>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/partials/terms.html b/blog/themes/smigle/layouts/partials/terms.html
new file mode 100644 (file)
index 0000000..c23e5e4
--- /dev/null
@@ -0,0 +1,16 @@
+{{ $title := .Title | lower }}
+{{ with .Title }}<h1>{{ . }}</h1>{{ end }}
+<ul id="terms">
+  {{ range $key, $value := .Data.Terms.ByCount }}
+    {{ if ($value.Name) }}
+      <li class="term">
+        <a
+          href="{{ $title | relURL }}/{{ $value.Name | urlize }}"
+        >
+          <span>{{ $value.Name }}</span>
+          <span> ({{ $value.Count }})</span>
+        </a>
+      </li>
+    {{ end }}
+  {{ end }}
+</ul>
diff --git a/blog/themes/smigle/layouts/posts/list.html b/blog/themes/smigle/layouts/posts/list.html
new file mode 100644 (file)
index 0000000..65098ee
--- /dev/null
@@ -0,0 +1,6 @@
+{{ define "main" }}
+  <main id="archive">
+    {{ with .Title }}<h1>{{ . }}</h1>{{ end }}
+    {{ partial "postsByDate.html" . }}
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/posts/single.html b/blog/themes/smigle/layouts/posts/single.html
new file mode 100644 (file)
index 0000000..509fd10
--- /dev/null
@@ -0,0 +1,9 @@
+{{ define "main" }}
+  <main>
+    <article>
+      <h1>{{ .Title }}</h1>
+      {{ partial "postMetaDetailed.html" . }}
+      <div>{{ .Content }}</div>
+    </article>
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/tags/taxonomy.html b/blog/themes/smigle/layouts/tags/taxonomy.html
new file mode 100644 (file)
index 0000000..689b58e
--- /dev/null
@@ -0,0 +1,6 @@
+{{ define "main" }}
+  <main id="tags">
+    {{ with .Title }}<h1>{{ "Tag: " }}{{ . }}</h1>{{ end }}
+    {{ partial "postsByDate.html" . }}
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/layouts/tags/terms.html b/blog/themes/smigle/layouts/tags/terms.html
new file mode 100644 (file)
index 0000000..aef4ed1
--- /dev/null
@@ -0,0 +1,5 @@
+{{ define "main" }}
+  <main id="terms">
+  {{ partial "terms.html" . }}
+  </main>
+{{ end }}
diff --git a/blog/themes/smigle/netlify.toml b/blog/themes/smigle/netlify.toml
new file mode 100644 (file)
index 0000000..7006f1f
--- /dev/null
@@ -0,0 +1,7 @@
+[build]
+publish = "exampleSite/public"
+command = "cd exampleSite && hugo --gc --minify"
+
+[build.environment]
+HUGO_VERSION = "0.83.1"
+HUGO_THEME = "repo"
diff --git a/blog/themes/smigle/static/android-chrome-192x192.png b/blog/themes/smigle/static/android-chrome-192x192.png
new file mode 100644 (file)
index 0000000..a0e4a9b
Binary files /dev/null and b/blog/themes/smigle/static/android-chrome-192x192.png differ
diff --git a/blog/themes/smigle/static/android-chrome-512x512.png b/blog/themes/smigle/static/android-chrome-512x512.png
new file mode 100644 (file)
index 0000000..4472138
Binary files /dev/null and b/blog/themes/smigle/static/android-chrome-512x512.png differ
diff --git a/blog/themes/smigle/static/apple-touch-icon.png b/blog/themes/smigle/static/apple-touch-icon.png
new file mode 100644 (file)
index 0000000..ca0db23
Binary files /dev/null and b/blog/themes/smigle/static/apple-touch-icon.png differ
diff --git a/blog/themes/smigle/static/browserconfig.xml b/blog/themes/smigle/static/browserconfig.xml
new file mode 100644 (file)
index 0000000..b3930d0
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+    <msapplication>
+        <tile>
+            <square150x150logo src="/mstile-150x150.png"/>
+            <TileColor>#da532c</TileColor>
+        </tile>
+    </msapplication>
+</browserconfig>
diff --git a/blog/themes/smigle/static/css/font.css b/blog/themes/smigle/static/css/font.css
new file mode 100644 (file)
index 0000000..0f6ff9c
--- /dev/null
@@ -0,0 +1,21 @@
+@font-face {
+  font-family: 'Iosevka';
+  src: local('Iosevka'),
+    url('/fonts/iosevka-regular.woff2') format("woff2");
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'Iosevka';
+  src: local('Iosevka'),
+    url('/fonts/iosevka-bold.woff2') format("woff2");
+  font-weight: bold;
+  font-style: bold;
+}
+@font-face {
+  font-family: 'Iosevka';
+  src: local('Iosevka'),
+    url('/fonts/iosevka-oblique.woff2') format("woff2");
+  font-weight: italic;
+  font-style: italic;
+}
diff --git a/blog/themes/smigle/static/css/reset.css b/blog/themes/smigle/static/css/reset.css
new file mode 100644 (file)
index 0000000..4273078
--- /dev/null
@@ -0,0 +1,76 @@
+html {
+  overflow-y: scroll
+}
+:root {
+  --bgcolor: white;
+  --fontcolor: #444;
+  --linkcolor: #00e;
+  --visitedcolor: #551a8b;
+  --precolor: #fff;
+  --prebgcolor: #000;
+}
+@media (prefers-color-scheme: dark) {
+  :root {
+     --bgcolor: black;
+     --fontcolor: white;
+     --linkcolor: #5bf;
+     --visitedcolor: #ae5ee0;
+     --precolor: #fff;
+     --prebgcolor: #383838;
+  }
+}
+body {
+  color: var(--fontcolor);
+  background: var(--bgcolor);
+}
+a {
+  text-decoration: none;
+}
+a:hover {
+  text-decoration: underline;
+}
+a:link {
+  color: var(--linkcolor);
+}
+a:visited {
+  color: var(--visitedcolor);
+}
+a:active {
+  color: var(--visitedcolor);
+}
+h1,h2,h3 {
+  line-height: 1.2;
+}
+p > code {
+  color: var(--precolor);
+  background: var(--prebgcolor);
+  padding: 2px;
+}
+pre {
+  color: var(--precolor);
+  background: var(--prebgcolor);
+  padding: 24px;
+  overflow-x: auto;
+}
+article {
+  padding: 5px 0;
+}
+.center  {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+  width: 100%;
+}
+img {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+figcaption {
+  color: #888;
+  font: 12px/1.5 monospace;
+  text-align: center;
+}
+figure {
+  margin: auto;
+}
diff --git a/blog/themes/smigle/static/css/smigle.css b/blog/themes/smigle/static/css/smigle.css
new file mode 100644 (file)
index 0000000..8b7a983
--- /dev/null
@@ -0,0 +1,73 @@
+body {
+  font-family: Iosevka, monospace;
+  max-width: 750px;
+  margin: 0 auto;
+  padding: 10px;
+}
+#brand {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  text-align: center;
+}
+#brand a {
+  color: var(--fontcolor);
+  text-decoration: none;
+}
+#brand h1, #brand h3 {
+  margin: 0;
+}
+#brand h1 {
+  font-size: 30px;
+}
+#brand h3 {
+  font-size: 20px;
+  font-weight: normal;
+}
+#brand .icon {
+  width: 75px;
+}
+footer {
+  margin-top: 30px;
+}
+header nav {
+  margin: 15px 0;
+}
+/* Medium devices (tablets, 768px and up) */
+@media (min-width: 768px) {
+  body {
+    margin-top: 25px;
+  }
+  #brand {
+    flex-direction: row;
+    text-align: unset;
+  }
+  #brand .text {
+    margin-left: 10px;
+  }
+  #brand h1 {
+    font-size: 45px;
+  }
+  #brand h3 {
+    font-size: 25px;
+  }
+}
+#postsByDate  {
+  list-style: none;
+}
+#postsByDate .date {
+  width: 60px;
+}
+#postsByDate div, #postsInOneGroup div {
+  display: inline-block;
+}
+#terms {
+  list-style: none;
+}
+#terms .term {
+  background-color: #ddd;
+  border-radius: 10px;
+  display: inline-block;
+  margin: 2px;
+  padding: 8px;
+}
diff --git a/blog/themes/smigle/static/favicon-16x16.png b/blog/themes/smigle/static/favicon-16x16.png
new file mode 100644 (file)
index 0000000..dbdbd8b
Binary files /dev/null and b/blog/themes/smigle/static/favicon-16x16.png differ
diff --git a/blog/themes/smigle/static/favicon-32x32.png b/blog/themes/smigle/static/favicon-32x32.png
new file mode 100644 (file)
index 0000000..44b9037
Binary files /dev/null and b/blog/themes/smigle/static/favicon-32x32.png differ
diff --git a/blog/themes/smigle/static/favicon.ico b/blog/themes/smigle/static/favicon.ico
new file mode 100644 (file)
index 0000000..f5d4f36
Binary files /dev/null and b/blog/themes/smigle/static/favicon.ico differ
diff --git a/blog/themes/smigle/static/fonts/iosevka-bold.woff2 b/blog/themes/smigle/static/fonts/iosevka-bold.woff2
new file mode 100644 (file)
index 0000000..e187d72
Binary files /dev/null and b/blog/themes/smigle/static/fonts/iosevka-bold.woff2 differ
diff --git a/blog/themes/smigle/static/fonts/iosevka-oblique.woff2 b/blog/themes/smigle/static/fonts/iosevka-oblique.woff2
new file mode 100644 (file)
index 0000000..5c00fc6
Binary files /dev/null and b/blog/themes/smigle/static/fonts/iosevka-oblique.woff2 differ
diff --git a/blog/themes/smigle/static/fonts/iosevka-regular.woff2 b/blog/themes/smigle/static/fonts/iosevka-regular.woff2
new file mode 100644 (file)
index 0000000..c3902e0
Binary files /dev/null and b/blog/themes/smigle/static/fonts/iosevka-regular.woff2 differ
diff --git a/blog/themes/smigle/static/images/brandIcon.svg b/blog/themes/smigle/static/images/brandIcon.svg
new file mode 100644 (file)
index 0000000..934cd17
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   viewBox="0 0 10.667969 13.998051"
+   version="1.1"
+   x="0px"
+   y="0px"
+   id="svg14"
+   sodipodi:docname="avatar.svg"
+   width="10.667969"
+   height="13.998051"
+   inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs18" />
+  <sodipodi:namedview
+     id="namedview16"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="9.4125"
+     inkscape:cx="14.289509"
+     inkscape:cy="16.308101"
+     inkscape:window-width="2560"
+     inkscape:window-height="1600"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g6" />
+  <g
+     transform="translate(-2.3320312,-1037.3642)"
+     id="g8">
+    <g
+       transform="translate(0.21663907,-0.49245047)"
+       id="g6">
+      <g
+         transform="translate(0.11197307,-0.05711857)"
+         id="g4">
+        <path
+           style="color:#000000;text-indent:0;text-transform:none;direction:ltr;baseline-shift:baseline;enable-background:accumulate"
+           d="m 8.5019531,1.0019531 c 2.3817949,0 4.4934359,1.7088875 4.4980469,4.3671875 -3.2e-5,0.00326 -3.2e-5,0.00651 0,0.00977 0,1.414 -0.208771,2.1245438 -0.492188,2.7148438 -0.283417,0.5903 -0.693732,1.1018156 -1.050781,1.9785156 -0.717543,1.7618 -0.48597,3.23205 -0.103515,4.21875 0.121519,0.3135 0.238123,0.493584 0.359375,0.708984 L 6.5,15 v -2.494141 c -2.62e-5,-0.261792 -0.2382078,-0.499974 -0.5,-0.5 -0.2020752,0 -1.0816333,2e-4 -1.4921875,0 -0.5021195,0 -0.6741454,-0.117512 -0.7871094,-0.257812 -0.112964,-0.1403 -0.1819105,-0.394622 -0.2011719,-0.732422 -0.012851,-0.2253 -0.00699,-0.476922 -0.00391,-0.732422 9.743e-4,-0.1123 0.00288,-0.224837 0.00391,-0.3359374 0.00452,-0.4128 0.00809,-0.7670906 0.00586,-1.0253906 -0.00112,-0.1292 -0.00376,-0.2342063 -0.00781,-0.3164062 -0.00203,-0.041 -0.00393,-0.074941 -0.00977,-0.1191407 -0.00292,-0.022 -0.00396,-0.042703 -0.019531,-0.095703 -0.00389,-0.013 -0.00941,-0.028828 -0.017578,-0.048828 -0.00817,-0.02 -0.040657,-0.080078 -0.041016,-0.080078 C 3.4293289,8.2611187 3.3128699,8.1311594 3.3125,8.1308594 c -1.849e-4,-2e-4 -0.1267654,-0.072266 -0.1269531,-0.072266 -1.878e-4,-10e-5 -0.1814499,-0.033203 -0.1816407,-0.033203 h -0.671875 c 0.1736554,-0.3093 0.3720032,-0.6936437 0.5117188,-0.9648437 0.2397481,-0.4654 0.3710936,-1.0223688 0.3710938,-2.1054688 0,-1.5887 0.6664461,-2.4979156 1.6660156,-3.1035156 0.9995695,-0.6057 2.3672392,-0.8457031 3.6210937,-0.8457031 z"
+           transform="translate(-0.32861214,1036.9118)"
+           fill="#000000"
+           fill-opacity="1"
+           fill-rule="nonzero"
+           stroke="none"
+           visibility="visible"
+           display="inline"
+           overflow="visible"
+           id="path2" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/blog/themes/smigle/static/js/.gitkeep b/blog/themes/smigle/static/js/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/blog/themes/smigle/static/mstile-150x150.png b/blog/themes/smigle/static/mstile-150x150.png
new file mode 100644 (file)
index 0000000..8c3eac6
Binary files /dev/null and b/blog/themes/smigle/static/mstile-150x150.png differ
diff --git a/blog/themes/smigle/static/safari-pinned-tab.svg b/blog/themes/smigle/static/safari-pinned-tab.svg
new file mode 100644 (file)
index 0000000..ff9c66d
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="896.000000pt" height="896.000000pt" viewBox="0 0 896.000000 896.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.14, written by Peter Selinger 2001-2017
+</metadata>
+<g transform="translate(0.000000,896.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none">
+<path d="M4746 8953 c-1 -2 -43 -5 -92 -8 -49 -2 -120 -7 -159 -11 -38 -3 -88
+-7 -110 -9 -74 -6 -297 -37 -356 -49 -14 -3 -41 -8 -60 -10 -19 -3 -34 -5 -34
+-6 0 -2 -22 -6 -70 -14 -64 -11 -367 -87 -403 -102 -18 -7 -35 -13 -37 -14 -3
+0 -6 0 -7 -1 -2 0 -11 -2 -20 -4 -15 -3 -47 -13 -128 -43 -8 -3 -20 -6 -25 -7
+-6 -2 -32 -12 -57 -24 -26 -11 -49 -21 -52 -21 -2 0 -25 -9 -50 -20 -26 -11
+-50 -20 -54 -21 -21 -5 -267 -133 -270 -141 -2 -4 -8 -8 -14 -8 -9 0 -226
+-137 -238 -150 -3 -3 -44 -35 -91 -72 -106 -83 -247 -222 -328 -325 -33 -43
+-67 -86 -76 -95 -8 -10 -15 -20 -15 -23 0 -2 -20 -36 -45 -74 -25 -38 -45 -74
+-45 -79 0 -5 -7 -15 -15 -22 -8 -7 -13 -16 -10 -20 3 -4 -3 -18 -13 -31 -15
+-20 -65 -131 -67 -149 0 -3 -6 -15 -13 -27 -7 -13 -10 -23 -6 -23 3 0 2 -6 -4
+-13 -17 -20 -103 -332 -104 -377 0 -8 -4 -35 -8 -60 -21 -119 -30 -247 -35
+-510 -4 -260 -11 -389 -30 -570 -6 -66 -16 -135 -20 -150 -3 -8 -7 -31 -10
+-50 -5 -30 -40 -187 -48 -215 -11 -37 -42 -126 -54 -155 -35 -84 -78 -176 -89
+-190 -6 -8 -15 -26 -19 -40 -4 -14 -11 -30 -16 -36 -8 -9 -99 -183 -157 -299
+-14 -27 -28 -52 -31 -55 -3 -3 -15 -23 -26 -45 -11 -22 -30 -57 -42 -77 -13
+-21 -22 -39 -21 -39 2 -1 98 -2 213 -3 243 -3 303 -10 364 -42 50 -26 114 -92
+141 -144 40 -79 43 -123 40 -735 -4 -962 -3 -1050 13 -1120 3 -11 8 -40 11
+-65 24 -178 106 -315 225 -378 14 -8 33 -15 41 -17 8 -3 40 -11 70 -20 30 -8
+84 -18 120 -21 105 -9 302 -10 307 -1 2 4 10 4 16 0 7 -4 201 -8 432 -8 l420
+-1 56 -26 c86 -42 170 -137 187 -213 2 -11 6 -387 8 -835 2 -448 3 -821 4
+-827 0 -10 340 -13 1665 -13 916 0 1665 3 1665 7 0 6 -42 81 -91 163 -47 80
+-139 293 -187 435 -73 215 -138 512 -157 720 -2 22 -7 74 -11 115 -21 234 -3
+615 42 855 2 10 6 37 10 60 9 62 58 278 72 315 3 8 6 20 8 27 6 30 54 187 70
+228 4 11 8 23 9 28 2 4 4 9 5 12 1 3 3 8 5 13 1 4 5 16 10 27 4 11 19 49 33
+85 38 99 106 255 156 358 25 51 46 97 46 102 0 6 4 10 8 10 4 0 13 12 19 27
+11 27 50 98 116 213 18 30 37 63 42 72 6 10 43 72 83 138 39 66 72 125 72 130
+0 4 7 15 15 24 31 30 231 443 239 491 1 6 4 15 8 20 6 10 67 198 73 225 2 8
+13 56 25 105 27 111 28 119 35 170 3 22 8 51 10 65 13 63 15 78 20 118 31 260
+39 415 40 737 0 257 -7 409 -19 446 -3 8 -7 37 -10 64 -3 28 -8 61 -11 75 -3
+14 -7 39 -10 55 -20 138 -139 513 -195 612 -5 10 -18 38 -30 63 -19 44 -27 59
+-99 185 -100 176 -227 339 -401 515 -164 165 -267 250 -455 373 -92 60 -297
+176 -320 181 -5 2 -35 14 -65 28 -76 36 -221 92 -305 118 -38 12 -81 26 -95
+31 -14 4 -36 11 -50 13 -14 3 -41 10 -60 16 -19 6 -51 13 -70 16 -19 3 -51 9
+-70 14 -20 6 -54 12 -75 15 -22 3 -49 7 -61 9 -19 4 -72 11 -169 23 -43 5
+-574 11 -579 6z"/>
+</g>
+</svg>
diff --git a/blog/themes/smigle/static/site.webmanifest b/blog/themes/smigle/static/site.webmanifest
new file mode 100644 (file)
index 0000000..b20abb7
--- /dev/null
@@ -0,0 +1,19 @@
+{
+    "name": "",
+    "short_name": "",
+    "icons": [
+        {
+            "src": "/android-chrome-192x192.png",
+            "sizes": "192x192",
+            "type": "image/png"
+        },
+        {
+            "src": "/android-chrome-512x512.png",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ],
+    "theme_color": "#ffffff",
+    "background_color": "#ffffff",
+    "display": "standalone"
+}
diff --git a/blog/themes/smigle/theme.toml b/blog/themes/smigle/theme.toml
new file mode 100644 (file)
index 0000000..33ff187
--- /dev/null
@@ -0,0 +1,27 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "smigle"
+license = "MIT"
+licenselink = "https://gitlab.com/ian-s-mcb/smigle-hugo-theme/-/blob/master/LICENSE"
+description = "Minimal Hugo theme using a Monospace font and free from tracking or external dependencies"
+homepage = "https://gitlab.com/ian-s-mcb/smigle-hugo-theme"
+tags = ["blog", "portfolio", "minimal", "monospace", "simple", "clean", "light", "responsive", "fast", "no-js", "no-tracking", "privacy"]
+features = []
+min_version = "0.41.0"
+
+[author]
+  name = "Ian S. McBride"
+  homepage = "https://iansmcb.ml/"
+
+# If porting an existing theme
+[original]
+  name = "smol"
+  homepage = "https://sumnerevans.com/"
+  repo = "https://github.com/sumnerevans/smol"
+
+[module]
+  [module.hugoVersion]
+    extended = false
+    max = ""
+    min = "0.41.0"
diff --git a/blog/update-theme.sh b/blog/update-theme.sh
new file mode 100755 (executable)
index 0000000..69f464f
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+set -eu
+
+script_path="$( cd -P "$( dirname "$(readlink -f "${0}")" )" && pwd )"
+theme_dir="${script_path}/themes/"
+
+cd "${theme_dir}"
+for _theme in "${theme_dir}/"*; do
+    cd "${_theme}"
+    current_commit_id="$(git rev-parse --short HEAD)"
+    default_branch="$(git remote show origin | grep 'HEAD branch' | awk '{print $NF}')"
+    git checkout "${default_branch}"
+    git pull
+    new_commit_id="$(git rev-parse --short HEAD)"
+    cd "${script_path}"
+
+
+    if [[ ! "${current_commit_id}" = "${new_commit_id}" ]]; then
+        git add "${_theme}"
+        git commit -S -m "Updated hugo theme (${new_commit_id})"
+    fi
+
+    git push
+done
diff --git a/buildmydist-2/404.php b/buildmydist-2/404.php
new file mode 100644 (file)
index 0000000..d867806
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $_GET["title"] = "トップページ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h1>404 NOT FOUND !!</h1>
+        <p>
+            <img src="https://blog.fascode.net/wp-content/uploads/2020/04/result.png" alt="404 not found">
+        </p>
+        <p>
+            へんじがない。まちがったアドレスのようだ。
+        </p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/buildmydist-2/commonhtml/aftermain.php b/buildmydist-2/commonhtml/aftermain.php
new file mode 100644 (file)
index 0000000..f042236
--- /dev/null
@@ -0,0 +1,2 @@
+<?php include("${commonhtml}/sidemenu.php"); ?>
+<?php include("${commonhtml}/footer.php"); ?>
diff --git a/buildmydist-2/commonhtml/beforemain.php b/buildmydist-2/commonhtml/beforemain.php
new file mode 100644 (file)
index 0000000..24f6af6
--- /dev/null
@@ -0,0 +1,5 @@
+
+<?php include("${commonhtml}/header.php"); ?>
+<div id="beforemain">
+    <?php include("${commonhtml}/warning.php"); ?>
+</div>
\ No newline at end of file
diff --git a/buildmydist-2/commonhtml/footer.php b/buildmydist-2/commonhtml/footer.php
new file mode 100644 (file)
index 0000000..2acb647
--- /dev/null
@@ -0,0 +1,14 @@
+<div id="footerblank"></div>
+
+<span id="scroll-up">
+    <p>上に戻る</p>
+</span>
+
+<footer>
+    <p style="float: left; margin-left: 1%;">
+        Copyright &copy; 2019 - 2021 Fascode Network
+    </p>
+</footer>
+
+
+<?php include("${commonhtml}/jsloader.php");?>
diff --git a/buildmydist-2/commonhtml/head.php b/buildmydist-2/commonhtml/head.php
new file mode 100644 (file)
index 0000000..bbf2816
--- /dev/null
@@ -0,0 +1,66 @@
+<!-- 基本的な情報の定義 -->
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
+
+
+<!-- アイコン -->
+<link rel="shortcut icon" href="favicon.ico">
+
+<!-- フォント -->
+<link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+<!-- Jquery -->
+<script src="https://code.jquery.com/jquery-3.5.1.min.js" crossorigin="anonymous"></script>
+
+
+<!-- 画像拡大用スクリプト -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/luminous-lightbox/2.3.3/Luminous.min.js" crossorigin="anonymous"></script>
+
+
+<!-- Twitter -->
+<meta name="twitter:card" content="summary">
+<meta name="twitter:site" content="Hayao0819">
+<meta name="twitter:title" content="<?php echo "${title}" ?> | オリジナルLinuxディストリを自作しよう2">
+<meta name="twitter:description" content="<?php echo "${description}" ?>">
+<!-- <meta name="twitter:image" content="画像URL“> -->
+
+
+<!-- 検索エンジン用設定 -->
+<meta content="<?php echo "${description}" ?>" name="description">
+<meta property="og:title" content="<?php echo "${title}" ?>">
+<meta property="og:description" content="<?php echo "${description}" ?>">
+<meta property="og:type" content="article">
+<meta property="og:url" content="<?php echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>">
+<meta property="og:site_name" content="オリジナルLinuxディストリを自作しよう2">
+<meta property="og:locale" content="ja_JP">
+<!-- <meta property="og:image" content="画像URL"> -->
+
+
+<!-- ここからCSS定義 -->
+<link href="https://use.fontawesome.com/releases/v5.15.2/css/all.css" rel="stylesheet">
+<link rel="stylesheet" href="/buildmydist-2/style/common.css">
+<link rel="stylesheet" href="/buildmydist-2/style/var.css">
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/modern-css-reset/dist/reset.min.css">
+<link rel="stylesheet" href="/buildmydist-2/style/sp.css" media="screen and (max-width: 799px)">
+<link rel="stylesheet" href="/buildmydist-2/style/pc.css" media="screen and (min-width: 800px)">
+<link rel="stylesheet" type="text/css" media="print" href="/buildmydist-2/style/print.css">
+
+<!-- ページ設定をJSに渡す -->
+<script>
+    var distro = "<?php echo "${distro}";?>";
+    var title = "<?php echo "${title}";?>";
+</script>
+
+<title><?php echo "${title}" ?> | オリジナルLinuxディストリを自作しよう2</title>
+
+<!-- PHPでconsole.logを行う -->
+<?php 
+    function console_log( $data ){
+    echo '<script>';
+    echo 'console.log('. json_encode( $data ) .')';
+    echo '</script>';
+    }
+
+?>
diff --git a/buildmydist-2/commonhtml/header.php b/buildmydist-2/commonhtml/header.php
new file mode 100644 (file)
index 0000000..d2ec459
--- /dev/null
@@ -0,0 +1,29 @@
+<header id="header">
+        <div style="display:flex; justify-content: space-between;">
+            <div id="open-sp-menu" style="padding: 3px; width:10%">
+                <i class="fa-solid fa-bars fa-2x fa-fw" ></i>
+            </div>
+            <div style="width: 100%;">
+                <h1 class="bar-logo" style="display: block;">
+                    <a href="/buildmydist-2/index.php">オリジナルLinuxディストリを自作しよう <?php echo "${title}" ?></a>
+                </h1>
+                <p class="description">様々なディストリビューションの開発の仕方を紹介します。</p>
+            </div>
+        </div>
+
+        <p>
+            <ul id="bar-container">
+                
+                <li class="bar-item-left" data-pagename="top"><a href="/buildmydist-2/">トップ</a></li>
+                <li class="bar-item-left" data-pagename="common"><a href="/buildmydist-2/pages/common">はじめに</a></li>
+                <li class="bar-item-left" data-pagename="ubuntu1804"><a href="/buildmydist-2/pages/ubuntu1804/">Ubuntu 18.04</a></li>
+                <!-- <li class="bar-item-left" data-pagename="ubuntu2004"><a href="/buildmydist-2/pages/ubuntu2004/">Ubuntu 20.04</a></li>
+                <li class="bar-item-left" data-pagename="fedora33"><a href="/buildmydist-2/pages/fedora33/">Fedora 33</a></li> -->
+                <li class="bar-item-left" data-pagename="archiso"><a href="/buildmydist-2/pages/archiso/">Arch Linux</a></li>
+                <li class="bar-item-left" data-pagename="alteriso3"><a href="/buildmydist-2/pages/alteriso3/">Alter Linux</a></li>
+                <li class="bar-item-left" data-pagename="misc"><a href="/buildmydist-2/pages/misc/">カスタマイズ</a></li>
+                <li class="bar-item-left" data-pagename="release"><a href="/buildmydist-2/pages/release/">リリースする</a></li>
+            </ul>
+        </p>
+
+</header>
\ No newline at end of file
diff --git a/buildmydist-2/commonhtml/jsloader.php b/buildmydist-2/commonhtml/jsloader.php
new file mode 100644 (file)
index 0000000..38220aa
--- /dev/null
@@ -0,0 +1,14 @@
+<span class="script_load" id="script_load">
+    <?php 
+        $script_file = glob("${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/script/*.js");
+        foreach($script_file as $script_path){
+            $script_name = basename($script_path);
+            echo "<script src=\"/buildmydist-2/script/${script_name}\"></script>";
+        }
+    ?>
+
+    <!-- シンタックスハイライティング -->
+    <script src="/buildmydist-2/prism/prism.js"></script>
+    <link rel="stylesheet" href="/buildmydist-2/prism/prism.css">
+</sapn>
+
diff --git a/buildmydist-2/commonhtml/sidemenu.php b/buildmydist-2/commonhtml/sidemenu.php
new file mode 100644 (file)
index 0000000..c3a92dd
--- /dev/null
@@ -0,0 +1,72 @@
+<aside id="sidemenu-right">
+    <h2>もくじ</h2>
+    <span id="index"></span>
+    <span id="relation_page">
+        <?php
+            $relation = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/pages/$distro/relation.php";
+            if(file_exists($relation)){
+                echo "<h2>関連ページ</h2>";
+                include($relation);
+            }
+        ?>
+        <!--
+        <h2>リンクまとめ</h2>
+        <ul id="link-list">
+            <script>
+                Array.from(document.getElementsByTagName("main")[0].getElementsByTagName("a")).forEach(source =>{
+                    var li = document.createElement("li");
+                    var element = source.cloneNode(true);
+                    li.appendChild(element);
+                    document.getElementById("link-list").appendChild(li);
+                    li = undefined;
+                });
+            </script>
+        </ul>
+        -->
+    </span>
+
+    <span id="link-collection">
+        <h2>いろいろリンク集</h2>
+        <h3>Fascode Network</h3>
+        <ul>
+            <li><a href="https://fascode.net/">公式サイト</a></li>
+            <li><a href="https://blog.fascode.net/">公式ブログ</a></li>
+            <li><a href="https://twitter.com/Fascode_JP">Twitter</a></li>
+            <li><a href="https://github.com/FascodeNet/">GitHub</a></li>
+        </ul>
+        <h3>山田ハヤオ</h3>
+        <ul>
+            <li><a href="https://twitter.com/Hayao0819/">Twitter</a></li>
+            <li><a href="https://github.com/Hayao0819/">GitHub</a></li>
+            <li><a href="https://www.instagram.com/hayao0819/">Instagram</a></li>
+        </ul>
+    </span>
+
+    <span id="about-hayao">
+        <h2>作者について</h2>
+        <p id="hayao-icon"><a href="https://twitter.com/Hayao0819"><img src="/buildmydist-2/images/hayao.jpg" alt=""></a></p>
+        <p>
+            <a href="https://twitter.com/yamad_linuxer">山D</a>と<a href="https://twitter.com/0_a_e">オレンジ</a>に誘われてSereneTeamを設立。
+            その後、なんやかんやあってFascode Networkに改称し、現在はAlter Linuxと周辺のコマンドを主に担当している。
+            まともに触れる言語が1つも無いのが最近の悩み。チョコレートとからあげが大好き。暇人...といいたいけど最近はかなり忙しい。
+        </p>
+    </span>
+
+    <span id="show-top-warning" style="display: none;">
+            <h2>警告</h2>
+            <p><input type="button" value="ふざけた警告を再表示する" onclick="ShowTopWarning()"></p>
+            <script>
+                function ShowTopWarning(){
+                    localStorage.removeItem("TopWarningHide");
+                    document.getElementById("top-warning").style.display = "block";
+                    document.getElementById("show-top-warning").style.display = "none"
+                }
+                window.addEventListener("load", function(){
+                    if (localStorage.getItem("TopWarningHide") == "true"){
+                        document.getElementById("show-top-warning").style.display = "block"
+                    }
+                })
+            </script>
+    </span>
+
+</aside>
diff --git a/buildmydist-2/commonhtml/warning.php b/buildmydist-2/commonhtml/warning.php
new file mode 100644 (file)
index 0000000..71eceb4
--- /dev/null
@@ -0,0 +1,29 @@
+<div id="top-warning" style="display: none;">
+    <div class="box-warning">
+        このサイトはまだ作りかけです。追記してほしいこと、わかりにくいこと、誤字などがあれば<a href="https://github.com/Hayao0819/hayao.fascode.net/issues">こちら</a>から報告をお願いします。
+    </div>
+
+    <div class="box-warning">
+        CSSが苦手なので一部のデバイスなどでレイアウトが崩れるかもしれません。また、h3以降のCSSもまだ何もできてません()何かアイデアあったらください。
+    </div>
+    <input type="button" value="邪魔なこいつらを閉じる" onclick="closeTopWarning()">
+</div>
+
+<script>
+    function closeTopWarning(){
+        if (localStorage.getItem("TopWarningHide") != "true"){
+            document.getElementById("top-warning").style.display = "none";
+            document.getElementById("show-top-warning").style.display = "block"
+            localStorage.setItem("TopWarningHide", "true")
+        }
+    }
+
+
+    window.addEventListener("load", function(){
+        if (localStorage.getItem("TopWarningHide") == "true"){
+            document.getElementById("top-warning").style.display = "none";
+        }else{
+            document.getElementById("top-warning").style.display = "block";
+        }
+    })
+</script>
diff --git a/buildmydist-2/favicon.ico b/buildmydist-2/favicon.ico
new file mode 100644 (file)
index 0000000..e48ef04
Binary files /dev/null and b/buildmydist-2/favicon.ico differ
diff --git a/buildmydist-2/images/hayao.jpg b/buildmydist-2/images/hayao.jpg
new file mode 100755 (executable)
index 0000000..92ae348
Binary files /dev/null and b/buildmydist-2/images/hayao.jpg differ
diff --git a/buildmydist-2/index.php b/buildmydist-2/index.php
new file mode 100644 (file)
index 0000000..080218a
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <?php
+        // ページ設定
+        $title = "トップページ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "top";
+        $description = "様々なメジャーなLinux系OSを自分の好きなようにカスタマイズして、再配布するためのサイトです。UbuntuやFedora、Alter Linux、Arch Linuxのディストリビューションを作成します。";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+    <main>
+        <h2>このサイトについて</h2>
+        <p>様々なメジャーなLinux系OSを自分の好きなようにカスタマイズして、再配布するためのサイトです。</p>
+        <br>
+        <p>複数のパソコンに同じOSを入れて設定を繰り返すといった際に使うことができます。</p>
+        <p>また、自分がカスタマイズしたものを誰かに使ってもらいたい!という人はネット上に公開することもできます。</p>
+
+        <h2>まずは何をするべきか</h2>
+        <p>「Ubuntu系のOSを自作しよう」(旧サイト)の公開後、とても多くの問い合わせをTwitterのDMにいただきました。</p>
+        <p>当時はまだ中2で時間もたくさんあったので1つ1つ対応を行っていましたが、現在は多忙により難しくなっています。</p>
+        <p>そのため、なるべく自分で解決できる力が必要です。(問い合わせてくれればできる限りお答えします。)</p>
+        <p>当然ですが、特に必要になるのはLinuxの知識です。</p>
+        <p>軽くGUIをいじるだけならばまだ良いのですが、システムの深い部分まで変更をしようとすると多少なりとも知識が必要になります。</p>
+        <p>また、独自のソフトウェアを追加したい場合や、アップデートの仕組み(パッケージマネージャ)を利用しようとする場合は、シェルスクリプトやPython、Cの知識なども必要になってきます。</p>
+        <p>いきなり開発を始める前に必要なことを十分に調べ、構想が実現可能であるかどうかを検証する必要があります。</p>
+
+        <h2>準備編</h2>
+        <p style="text-align: center;">
+            <a href="/buildmydist-2/pages/common">まずはここから</a>
+        </p>
+
+        <h2>このサイトができるまでの経緯</h2>
+        <p>もともと、ネットで知り合った友人とUbuntu派生のディストリを開発しようと情報を収集したのが始まりでした。</p>
+        <p>しかし、日本語の情報はほぼ皆無。少しだけある情報も古くて現在は使えない場合がほとんどでした。</p>
+        <p>そこで様々な情報を集め、足りないものは独自で開発し、誰でもかんたんに作れるようにしようというのがこのサイトの目的です。</p>
+        <p><a href="/buildmydist/index.html">【2019年版】Ubuntu系のOSを自作しよう</a>はこのサイトの前身です。既に古くなっており、使えなくなっている情報も多いです。</p>
+        <p>Ubuntuだけではなく、より多くの情報をまとめやすくするためにサイトを書き直しました。</p>
+        <p>旧サイトにかかれている内容はかなり古くなっていますので注意してください。(更新予定はありません)</p>
+
+        <h2>余談</h2>
+        <p><a href="/buildmydist/index.html">【2019年版】Ubuntu系のOSを自作しよう</a>が思った以上に好評で驚いています。</p>
+        <p>なんであんなマイナーで一部しか需要のないようなサイトが人気になったのか本当に謎です。</p>
+        <p>未だにアクセスがあるのですが情報が古い上にサイトの作りも恥ずかしいくらいなので、もしそっちのサイトを見てる人がいたらこの新しいサイトを教えてあげてください。</p>
+        
+
+        <h2>筆者について</h2>
+        <p>しがない田舎の高校生です。偉そうなことを言っていますが何もできません。<a href="https://twitter.com/Hayao0819">Twitter</a>をフォローしてくれると喜びます。</p>
+        <p>Fascode Networkに所属してAlter Linuxを開発しています。最近はインフラとフロントエンドにも手を出したいと考えていたり。</p>
+        <p>このサイトで初めてPHPとJqueryを使った。難しい。更新が遅いのはだいたいこれのせい。CSSが苦手。いみわからん。</p>
+        <p>最推しのOSはArch Linux。得意な言語はありません。好きなアニメはまどマギと青ブタ、らきすた。</p>
+
+        <h2>誤字脱字を見つけたら</h2>
+        <p>筆者に知らせていただくか、誤字修正のプルリクエストを送ってください。</p>
+        <p>(スタイルとか全体のコードの修正とかもどしどしお願いします...なんせウェブ系言語は苦手なもんで)</p>
+        <p>ソースコードは<a href="https://github.com/hayao0819/hayao.fascode.net" target="_blank">GitHub</a>で公開されています。</p>
+        
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/ingredient.php b/buildmydist-2/ingredient.php
new file mode 100644 (file)
index 0000000..12e7160
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "成分表";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        //$distro = "osname";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>成分表</h2>
+        <p>このサイトは主に以下の成分で構成されています。</p>
+        <p>また、Arch Linux上で製造しています。アレルギーをお持ちの方はご注意ください。</p>
+        <h3>HTML</h3>
+        <p>本文を書くのに使用しています。</p>
+        <h3>PHP</h3>
+        <p>ヘッダーやフッター、サイドバーなどを共通化するために使用しています。</p>
+        <h3>JavaScript</h3>
+        <p>レスポンシブデザインを実現し、動的なことをするために使ってます。(たぶん全部CSSで代用できる)</p>
+        <h3>魔法少女まどか☆マギカ (外伝 マギアレコード)</h3>
+        <p>モチベの維持と癒やし、サントラを作業用BGMに使用。学校で疲れた後にマギレコやるのが趣味。杏ゆまは天使。</p>
+        <h3>青春ブタ野郎シリーズ</h3>
+        <p>モチベの維持。麻衣さんはかわいい。</p>
+        <h3>Twitter</h3>
+        <p>これがないと生きていけない。生活必需品。全人類がやるべき。</p>
+        <h3>ゆるキャン△</h3>
+        <p>松ぼっくりとか木の枝の声が好き。現在(2021年2月20日)2期なうなのでDアニメで本編見てからニコニコでコメントを見るのが好き。しまりんがかわいい。拝め。</p>
+        <h3>なおこさん</h3>
+        <p>PHPとCSSにものすごく強い人。めっちゃアドバイスもらってる。<a href="https://twitter.com/naoko1010hh">Twitter</a>は閲覧注意。</p>
+    </main>
+
+    <script>
+        window.addEventListener("load", function(){
+            document.getElementsByTagName("footer")[0].addEventListener("click", function(){
+                document.location.href = "https://yurucamp.jp/";
+            })
+        })
+    </script>
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/alteriso3/alteriso3.0/index.php b/buildmydist-2/pages/alteriso3/alteriso3.0/index.php
new file mode 100644 (file)
index 0000000..213bbea
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Alter Linux - カスタマイズ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "alteriso3";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>AlterISO3.0について</h2>
+        <p>以下の情報はAlterISO 3.0のものです。</p>
+
+        <h2>shareチャンネルについて</h2>
+        <p>AlterISO3には開発をものすごく容易にする「shareチャンネル」という仕組みがあります</p>
+        <p>shareチャンネルは、ビルドされるチャンネルに関わらず自動で追加されるパッケージやファイルの集まりです。</p>
+        <p>この仕組みによってチャンネルで共通のファイルを1箇所で管理し、また新しいチャンネルのソースコードを最小限に抑えます</p>
+        <p>例えばLinuxカーネルやブートローダーなどはチャンネルに関わらず必ずインストールされます。</p>
+        <p>また、ホスト名を設定する<code>/etc/hostname</code>や<code>/etc/bash.bashrc</code>などのファイルも必ず必要です。</p>
+        <p>shareチャンネルにそれらをまとめることによって自動で追加されるようになっています。</p>
+        <p>今この記事を見ているあなたが、AlterISO3本体の開発に関わりたいのではなく単純にチャンネルを作りたいだけなのならそこまで深く理解する必要はありません。</p>
+        <p>単純に「必要なパッケージやファイルは自動で追加されるんだな」と思ってください。</p>
+        <br>
+        <p>shareチャンネルには「share」と「share-extra」があります。</p>
+        <p>shareは強制的に全てのチャンネルで使用されますが、share-extraは設定ファイルで使用するかどうかを選択できます。</p>
+        <p>というのも、share-extraはGUIのためのファイルやパッケージが多く含まれており、CLIのチャンネルを構成したい場合には邪魔にしかならないためです。</p>
+
+        <h2>イメージファイルに含める、上書きするファイルを配置する</h2>
+
+
+        <h4>それぞれのディスプレイマネージャに自動ログインを設定する</h4>
+        <p>airootfsを利用して自動ログインを設定しましょう。ただし、ここにもまた落とし穴が有ります。</p>
+        <p>AlterISO3のビルドオプションをよく見るとライブ環境のユーザー名を自由に変更することが出来ます。</p>
+        <p>つまり、直接ユーザー名を設定ファイルに書くことは出来ません。</p>
+        <p>そこで先程軽く説明したスクリプトによる置き換えを利用します。</p>
+        <p>まず何も考えず普通にディスプレイマネージャの自動ログインを設定してください。</p>
+        <p>自動ログインの設定については<a href="">ディスプレイマネージャについて</a>を参照してください。</p>
+        <p>その後、自動ログインするユーザーを記述する部分に<code>%USERNAME%</code>と入れてください。</p>
+        <p>この<code>%USERNAME%</code>をシェルスクリプトでユーザー名に置き換えます。</p>
+        <br>
+        <p>もし<code>/etc/lightdm/lightdm.conf</code>にユーザー名を書いたのなら以下のようなコマンドを<code>customize_airootfs</code>に記述してください。</p>
+        <pre class="line-numbers"><code class="language-shell">
+# Replace auto login user
+sed -i "s|%USERNAME%|${username}|g" "/etc/lightdm/lightdm.conf"
+        </code></pre>
+        <p>設定ファイルのパスは各自で書き換えてください。</p>
+        <p>その後、ディスプレイマネージャを自動起動させるためのsystemdのコマンドも同じスクリプトに記述してください。</p>
+        <p>これで正常にディスプレイマネージャの自動ログインとGUIの自動起動の設定が出来ました。</p>
+        <p>この部分はとてもむずかしいので実際にAlter Linux Xfceなどのソースコードを参照してみてください。</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
+
diff --git a/buildmydist-2/pages/alteriso3/basic-usage/index.php b/buildmydist-2/pages/alteriso3/basic-usage/index.php
new file mode 100644 (file)
index 0000000..1d5aba4
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Alter Linux - 基本的な使い方";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "alteriso3";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>AlterISO3の基本的な使い方</h2>
+        <p>基本的な使い方はコマンドラインで<code>build.sh</code>を実行するだけです。</p>
+        <p>設定はコマンドラインオプションや設定ファイルで行います。</p>
+        
+        <h2>チャンネルについて</h2>
+        <p>AlterISO3では、1つの設定やファイルの集合を「チャンネル」という単位で管理しています。</p>
+        <p>例えば「Alter Linux Xfce」と「Alter Linux LXDE」というようにチャンネルを切り替えます。</p>
+        <p>その1つのチャンネルの中で「日本語版」「英語版」「x86_64」「i686」のように設定を行っていきます。</p>
+        <p>基本的にはデスクトップ環境やウィンドウマネージャでチャンネルを分けるのが良いと思います。</p>
+
+        <h2>AlterISO3本体を取得しよう</h2>
+        <p>GitHubからソースコードを取得します。</p>
+        <div class="code language-shell">
+            git clone "https://github.com/FascodeNet/alterlinux"<br>
+            cd alterlinux/<br>
+            ./build.sh -h
+        </div>
+        <p>上のコマンドでbuild.shの使い方が表示されれば成功です。</p>
+
+        <h2>とりあえずビルドしてみよう</h2>
+        <p>Alter Linux Xfceをまずはビルドしてみましょう。</p>
+        <div class="code language-shell">
+            sudo ./build.sh -b xfce
+        </div>
+        <p>これでビルドが開始されるはずです。</p>
+        <p><code>-b</code>はブートスプラッシュ(起動時のアニメーション)を有効化するオプションです。</p>
+        <p>開始されずにエラーが出た場合は<a href="../error/">エラー一覧とその対処方法</a>を参照してください。</p>
+
+
+        <h2>ビルドオプションを確認しよう</h2>
+        <p>build.shには様々なオプション、設定が有ります。</p>
+        <p>それらは以下のコマンドで確認できます。</p>
+        <div class="code language-shell">
+            ./build.sh -h
+        </div>
+        <br>
+        <p>英語ですがかんたんだと思うでの頑張って読んでください(投げやり)</p>
+        <p>例えば、「カーネルはlts、アーキテクチャはi686、lxdeでデバッグメッセージを有効化する」という場合は以下のようにコマンドを実行します。</p>
+        <div class="code language-shell">
+            sudo ./build.sh -k lts -a i686 -d lxde
+        </div>
+        
+
+
+        <h2>作成されたisoを手に入れる</h2>
+        <p><code>out</code>ディレクトリ内にisoがあるはずです。</p>
+        <p>rootユーザーが所有しているので自分が所有するように書き換えます。</p>
+        <p><code>user</code>という部分を自分のユーザー名に置き換えてください。</p>
+        <div class="code language-shell">
+            sudo chown user ./out/*<br>
+            sudo chmod 644 ./out/*<br>
+        </div>
+        <p>あとは<code>cp</code>コマンドなりGUIなりでisoファイルを移動してください。</p>
+
+        <h2>作成されたisoを起動してみよう</h2>
+        <p>通常のLinuxを起動するようにisoを仮想マシンで指定して起動します。</p>
+        <p>仮想マシンの使い方については<a href="/pages/misc/virtual/index.php"></a>を参照してください。</p>
+        <p>もし起動できない場合は以下に従ってください。</p>
+
+        <h2>起動時にエラーが出たり、起動できない場合には</h2>
+        <p>ビルドログを精査して、エラーが出ている箇所がないか確認を行ってください。</p>
+        <p>また、チェックサムを確認してファイルのコピーやダウンロードが正常に行われているかを確認してください。</p>
+        <p><a href="https://0e0.pw/aRx1">チェックサムの確認方法はこちら</a>を参照してください。</p>
+
+        <h2>さいごに</h2>
+        <p>AlterISO3の大体の使い方はわかったでしょうか?</p>
+        <p>次は実際にAlterISO3を利用してカスタマイズを行っていこうと思います。</p>
+        <p><a href="../customize/">次のページに進む</a></p>
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/alteriso3/customize/images/splash.png b/buildmydist-2/pages/alteriso3/customize/images/splash.png
new file mode 100644 (file)
index 0000000..5a708b8
Binary files /dev/null and b/buildmydist-2/pages/alteriso3/customize/images/splash.png differ
diff --git a/buildmydist-2/pages/alteriso3/customize/index.php b/buildmydist-2/pages/alteriso3/customize/index.php
new file mode 100644 (file)
index 0000000..1839ca1
--- /dev/null
@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Alter Linux - カスタマイズ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "alteriso3";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>AlterISO3のチャンネルを作成する</h2>
+        <p>実際に独自のカスタマイズを施し、チャンネルの開発を行っていきます。</p>
+
+        <h2>このサイトの手順で開発をするもの</h2>
+        <p>今回は新しくAlter Linuxのエディションを開発します。だいたいの方針は以下のとおりです。</p>
+        <ul>
+            <li>ウィンドウマネージャとしてOpenBoxを採用</li>
+            <li>アプリケーションの起動はPlankとUlauncher</li>
+            <li>GTKのテーマはAdaptaでアイコンのテーマはPapirus</li>
+            <li>デスクトップの処理やファイルマネージャーにはPCManFMを採用</li>
+            <li>64bit版と32bit版を作成する</li>
+            <li>OSの名前は「Karaage OS」にする</li>
+            <li>チャンネル名は「karaage」にする</li>
+        </ul>
+
+        <h2>basicチャンネルをコピーして最低限の改造をしよう</h2>
+        <p>ターミナルを開きbuild.shがあるディレクトリまで移動してください。</p>
+        <p>AlterISO3にはかんたんにチャンネルを開発できるようにするためのベースチャンネルが用意されています。</p>
+        <p>ここには最低限必須のファイルが既に揃っているのでそれを改造して最低限の準備を整えます。</p>
+
+        <h3>basicをコピーしよう</h3>
+        <p>コマンドでbasicチャンネルをコピーします</p>
+        <p><code>.add</code>というのを付け加えることによってAlterISO3のそのもののソースコード管理から除外しつつAlterISO3にチャンネルとして正しく認識させることができます。</p>
+        <code class="code language-shell">
+            cd channels<br>
+            cp -r basic/ karaage.add/<br>
+        </code>
+        <p>ここで作成されたkaraage.addが1つのチャンネルを構成するディレクトリになります。</p>
+        <p>これを今後は「チャンネルディレクトリ」と呼びます。</p>
+
+        <h3>必要なファイルを書き換えよう</h3>
+        <p>いくつか用意されているファイルを書き換えます。</p>
+
+        <h4>airootfs.any/root/custmize_airootfs_basic.sh</h4>
+        <p>このディレクトリとスクリプトの意味は後々に解説します。とりあえずこのスクリプトを以下のように変更してください。</p>
+        <p><code>custmize_airootfs_basic.sh</code>から<code>custmize_airootfs_karaage.sh</code>に変更します。</p>
+        <p>最後の<code>_</code>のあとをチャンネル名にしてください。</p>
+
+        <h4>alteriso</h4>
+        <p>alterisoファイルはチャンネルが対応しているAlterISOのバージョンを書くためのものです。</p>
+        <p>このファイルを変更してしまうとbuild.shに認識されなくなってしまうので十分注意してください。このファイルはチャンネルを構成する上で唯一必須のものです。</p>
+        <p>2021年3月5日で最新のバージョンはAlterISO 3.1です。</p>
+
+        <h4>architecture</h4>
+        <p>利用可能なアーキテクチャを1行ずつ列挙していきます。</p>
+        <p>今回はi686版とx86_64版を作りますので、特に変更はいらないと思います。</p>
+        <p>x86_64だけ、i686だけ、のようにしたい場合には先頭に#をつけてコメントアウトしてください。</p>
+
+        <h4>config.any</h4>
+        <p>後々でとても重要になってくるのですが、現段階では特に変更することはありません。</p>
+        <p>このファイルはシェルスクリプトになっており、主にAlterISO3の設定(変数の定義)を行います。</p>
+        <p>この設定に記述可能な変数は全てdefault.confに記述されています。(OS名やデフォルトのユーザー名などもここで設定します。)</p>
+        <p>今回は「Karaage OS consisting of Openbox and Ulauncher」(OpenboxとUlauncherで構成された Karaage OS)としました。</p>
+
+        <h4>description.txt</h4>
+        <p>チャンネルの説明を記述するファイルです。</p>
+        <p>build.shのヘルプを見たとき、下の方にチャンネルの一覧とその説明が表示されていたはずです。</p>
+        <p>そのチャンネルの説明をこのファイルで定義します。</p>
+        <p>基本的に1行で記述するのが望ましいです。</p>
+
+        <h3>チャンネルの完全な仕様を確認する</h3>
+        <p>上のセクションではbasicチャンネルに存在している最低限のファイルを書きましたが、gnomeやxfceなどの他のチャンネルを見てみると他にも数多くのファイルが設置されているのがわかると思います。</p>
+        <p>チャンネルディレクトリ無いに置くことができるファイルの完全な一覧は全てドキュメント化されているのでそちらを参考にしてください。</p>
+        <p>(主要なファイルはこのサイトでも解説しますが、細かい仕様や特殊な状況でしか使用しないファイルについては解説を行いませんのでドキュメントを読んでください。)</p>
+        <p><a href="https://github.com/FascodeNet/alterlinux/tree/dev/docs/jp">完全なドキュメント一覧はこちら</a></p>
+
+        <h2>モジュールについて</h2>
+        <div class="box-warning">
+            <p>モジュールはAlterISO 3.1で開発されている新機能です。AlterISO 3.0では使用できません。</p>
+        </div>
+        <p>AlterISO3には開発をものすごく容易にするモジュールという仕組みがあります</p>
+        <p>モジュールは特定の用途のためのパッケージやファイルをあつめたグループです。</p>
+        <p>この仕組みによってチャンネルで共通のファイルを1箇所で管理し、また新しいチャンネルのソースコードを最小限に抑えます</p>
+        <p>例えばLightDmの最小限の設定をまとめた「lightdm」モジュールや、Linuxの正常な動作に必要な最低限のファイルをまとめた「share」モジュールがあります。</p>
+        <p>今この記事を見ているあなたが、AlterISO3本体の開発に関わりたいのではなく単純にチャンネルを作りたいだけなのならそこまで深く理解する必要はありません。</p>
+        <p>単純に「必要なパッケージやファイルは自動で追加されるんだな」と思ってください。</p>
+        <p>モジュールには様々な種類があり、チャンネルの開発の手助けになります。</p>
+        <br>
+        <p>使用するモジュールの設定はチャンネル設定ファイルで行います。まずはその設定ファイルについてを解説します。</p>
+
+
+        <h2>チャンネル設定を定義しよう</h2>
+        <p>チャンネル設定はチャンネルディレクトリ直下にある<code>config.any</code>で行います。</p>
+        <p>もしアーキテクチャごとに異なる設定を適用したい場合には<code>config.i686</code>や<code>config.x86_64</code>に書きます。</p>
+        <p>設定可能な値は全て<code>default.conf</code>に記述されていますので、それをコピーしてから編集します。</p>
+        <p>様々な値をここで設定するので1つずつ見ていきます。</p>
+        
+
+        <h3>OSの名前を設定しよう</h3>
+        <p>本来AlterISOはAlter Linuxのために開発されたのでデフォルトのOS名はAlter Linuxになっています。</p>
+        <p>設定でOSの名前を自由に変更できるようになっているので、それを変更します。</p>
+        <p>OS名は複数の変数で定義されています。それをまずは変更していきます。</p>
+<pre class="line-numbers"><code class="language-shell">
+# OS name used for startup screen, etc.
+# This setting cannot be changed by an argument.
+os_name="Alter Linux"
+
+# OS name used for the name of the image file.
+# This setting cannot be changed by an argument.
+iso_name=alterlinux
+
+# Image file label
+# This setting cannot be changed by an argument.
+iso_label="ALTER_$(date +%Y%m%d)"
+
+# Directory name used for installation
+# This setting cannot be changed by an argument.
+install_dir=alter
+</code></pre>
+        <p>該当しているのはこの部分です。1つずつ見ていきます。</p>
+
+        <h4>os_name</h4>
+        <p>一番基本となるOS名です。空白や大文字などを含めることが出来ます。</p>
+        <p>今回のOS名は「Karaage OS」なので、以下のように設定します。</p>
+        <div class="code language-shell">os_name="Karaage OS"</div>
+
+        <h4>iso_name</h4>
+        <p>iso_nameはビルドされたISOのファイル名になります。</p>
+        <p>空白や大文字を含めると思わぬエラーを引き起こす可能性があるので、小文字だけにすることをおすすめします。</p>
+        <div class="code language-shell">iso_name="karaageos"</div>
+
+        <h4>iso_label</h4>
+        <p>ビルドされたisoをディスクに焼いたり、マウントしたりした際に使用されるラベルです。</p>
+        <p>全て大文字にするのが良いと思いますので以下のようにします。</p>
+        <div class="code language-shell">iso_label="KARAAGE_$(date +%Y%m%d)"</div>
+
+        <h4>install_dir</h4>
+        <p>システム内部で使用されるディレクトリの名前です。短くて小文字が良いと思います。</p>
+        <p>(あまりに長いとブートローダーで細かい設定をするときに面倒になります。)</p>
+        <div class="code language-shell">install_dir="karaage"</div>
+
+        <h4>最終的なconfig.any</h4>
+        <p>コメントも含めた方が良いので最終的に以下のようになります。</p>
+<pre class="line-numbers"><code class="language-shell">
+# OS name used for startup screen, etc.
+# This setting cannot be changed by an argument.
+os_name="Karaage OS"
+
+# OS name used for the name of the image file.
+# This setting cannot be changed by an argument.
+iso_name="karaageos"
+
+# Image file label
+# This setting cannot be changed by an argument.
+iso_label="KARAAGE_$(date +%Y%m%d)"
+
+# Directory name used for installation
+# This setting cannot be changed by an argument.
+install_dir="karaage"
+</code></pre>
+        <p>これで設定ファイルがビルド開始時に自動で読み込まれるようになります。</p>
+
+        <h3>使用するモジュールを設定する</h3>
+        <p>先程も説明したshare-extraチャンネルを使用するための設定を行います。</p>
+        <p><code>basic</code>チャンネルをベースに開発している場合は既に最低限の設定が済んでいます。</p>
+        <p><code>config.any</code>の<code>modules</code>配列がモジュールの一覧です。</p>
+        <p>様々なモジュールがありますが、まずは最小限のモジュールだけ設定します。GUIベースのチャンネルの場合は<code>share-extra</code>モジュールを追加してください。</p>
+        <div class="box-warning">
+                <p>設定ファイルはBashスクリプトであり、この配列もシェルの配列です。区切り文字は<code>,</code>などではなく空白文字です。</p>
+        </div>
+        <pre class="line-numbers"><code class="language-shell">
+# Modules to include
+# An array of module directory names to include.
+# This setting cannot be changed by an argument.
+modules=(
+    "base"
+    "share"
+    "share-extra"
+    "lightdm"
+    "qtongtk"
+    "zsh-powerline"
+)
+</code></pre>
+
+        <h2>パッケージリストを定義しよう</h2>
+        <p>ここからいよいよ本格的にチャンネルの開発を始めます。</p>
+
+        <h3>インストールするパッケージを決めよう</h3>
+        <p>まずはインストールするパッケージを決めます。</p>
+        <p>先程も解説したとおり、ほとんどのパッケージはshare-extraによってインストールされるため、必要なことはそれほど多くありません。</p>
+        <p>現にxfceチャンネルで指定されているパッケージもディスプレイマネージャとデスクトップ環境、そしてGTKのアイコンとテーマです。</p>
+        <p>公式リポジトリのパッケージリストは全て<code>packages</code>ディレクトリ内に配置します。</p>
+        <p>(AURのパッケージリストは別の場所に記述します。)</p>
+        <p><code>config.x86_64</code>などと同様に拡張子でアーキテクチャを表しますが、パッケージリストはanyをサポートしていません。必ず対応しているアーキテクチャ分のパッケージリストを書く必要があります。</p>
+        <p>パッケージディレクトリの直下に配置された、ファイル名が「.アーキテクチャ」で終わるファイルがパッケージリストとして読み込まれます。</p>
+        <p>パッケージリストが書かれたファイル名はアーキテクチャさえ合っていればファイル名は何でも良いです。</p>
+        <p>注意する点は、パッケージは1行で1つだけ記述することです。</p>
+        
+        <h3>もしインストールしたくないパッケージが合ったら</h3>
+        <p>shareやshare-extraによって勝手にインストールされてしまうのを防ぎたい場合、excludeファイルを使用してください。</p>
+        <p>excludeファイルに記述されているパッケージは明示的なインストールがされなくなります。(依存パッケージとしてインストールされることは有ります。)</p>
+
+        <h3>Karaage OSのパッケージリスト</h3>
+        <p>今回はOpenBoxとUlauncher、PCManFMを中心にデスクトップを構成するので、そのパッケージをインストールしていきます。</p>
+        <h4>OpenBox</h4>
+        <p>インストールするパッケージや設定方法などは<a href="https://wiki.archlinux.jp/index.php/Openbox">ArchWiki</a>が最も参考になります。</p>
+        <p>今回はOpenBox本体とその設定ツールとして<code>openbox obconf lxinput lxrandr</code>をインストールします。</p>
+        <p>パッケージファイルはそれぞれの役割ごとにカテゴリ分けしたほうが後々で管理をしやすいです。</p>
+        <h4>GTKテーマ、アイコンテーマ</h4>
+        <p>詳しくは<a href="/buildmydist-2/pages/misc/gtk-icon-theme/">GTKのアイコンとテーマについて</a>を参照してください。</p>
+        <div class="box-warning">
+            <p>ただし、テーマやアイコンを直接配置するのは推奨されていません。</p>
+            <p>必ずPKGBUILDを作成してAURに投稿するなどの方法でインストールを行ってください。</p>
+            <p>パッケージの作り方については<a href="http://localhost/buildmydist-2/pages/misc/pkgbuild">pacmanのパッケージを作る</a>を参照してください。</p>
+        </div>
+        <p>今回は既にArch Linuxの公式リポジトリ上に登録されている<code>adapta-gtk-theme papirus-icon-theme</code>をインストールします。</p>
+
+        <h3>ネットワーク系のツールをインストールする</h3>
+        <p>GUI用のネットワークツールとして<code>network-manager-applet</code>をインストールします。</p>
+        <p>セキュリティツールとして<code>firewalld ufw</code>をインストールします。</p>
+        <p>また、ブラウザとしては<code>chromium</code>をインストールします。</p>
+
+        <h3>ディスプレイマネージャについて</h3>
+        <p>ディスプレイマネージャにはLightDMをを採用します。</p>
+        <p>また、Greeterとして<code>lightdm-slick-greeter</code>、その設定ツールとして<code>lightdm-settings</code>をインストールします。</p>
+
+        <h3>AURのパッケージについて</h3>
+        <p>AURのパッケージリストは<code>packages</code>の代わりに<code>packages_aur</code>ディレクトリにパッケージリストを入れてください。</p>
+        <p>今回はAURからUlauncherをインストールしますので、それだけは別の場所に記述します。</p>
+        <p><code>karaage.add/packages_aur.x86_64/ulauncher.conf</code>に<code>ulauncher</code>と書きます。</p>
+        <p>これでAlterISO3はAURからPKGBUILDを取得してビルドし、インストールします。</p>
+
+        <h3>細かい仕様について</h3>
+        <p>Plymouthのパッケージやカーネルパッケージ、言語用パッケージなどの特定の条件でのみインストールされるパッケージがあります。</p>
+        <p>それらのカスタマイズは通常のチャンネルでは必要ありませんが、より細かくカスタマイズをしたい場合は知っておくと良いでしょう。</p>
+        <p>それらのパッケージの設定方法は<a href="https://github.com/FascodeNet/alterlinux/blob/dev/docs/jp/CHANNEL.md">チャンネルのの仕様</a>の「言語ごとのパッケージ」「カーネルごとのパッケージ」などを参照してください。</p>
+
+        <h2>ここまでのソースコード</h2>
+        <p>ここまででパッケージリストの定義といくつかの設定ファイルの変更を行いました。</p>
+        <p>どうしても文章ばかりになってしまってわかりにくい箇所も合ったと思うので、ここで一回現段階のソースコードを確認します。</p>
+        <p>以下のリンクでGitHub上に公開してあるので参考にしてみてください。</p>
+        <p><a href="https://github.com/Hayao0819/alterlinux-channels/tree/be4bbdad450f5538c36323b41aa8fd81388f152d/karaage.add">ソースコードはこちら</a></p>
+        <p>ここで完成ではなくこれからさらにいろいろといじっていきます。</p>
+
+        <h2>イメージファイルに含める、上書きするファイルを配置する</h2>
+        <div class="box-warning">
+            このセクションがチャンネル開発の本質でもあり一番難しく、やることが多い部分です。<br>
+            そのため解説がめちゃくちゃ長くなっています。ここさえ抜ければかんたんなので頑張ってください。
+        </div>
+        <p>airootfsディレクトリには上書きするファイルを含めることができます。</p>
+        <p>airootfsを/に見立ててディレクトリ構造を維持しながらファイルを上書きします。</p>
+        <p>例えば、全てのアーキテクチャで/etc/hostnameを上書きしたい場合は<code>karaage.add/airootfs.any/etc/hostname</code>にファイルを設置します。</p>
+        <p>airootfsもpackagesと同様に拡張子でアーキテクチャを識別します。airootfsではanyアーキテクチャを指定可能です。</p>
+
+        <h3>ライブ環境の設定のためにchrootでコマンドを実行する</h3>
+        <p>AlterISOではパッケージのインストール後に様々なコマンドを実行してユーザー作成や言語設定などをこなっています。</p>
+        <p>そしてチャンネル開発者が、自由にコマンドをroot権限で実行できる仕組みが用意されています。</p>
+        <p>最初の準備で名前を変更したシェルスクリプトがあったはずです。あれこそがパッケージのインストール後に実行されるシェルスクリプトです。</p>
+        <p><code>/root/customize_airootfs_[チャンネル名].sh</code>というシェルスクリプトがじっこうされるようになっています。</p>
+        <p>ここで「コマンドによる」ライブ環境の設定を行うことができます。</p>
+        <p>また、ユーザー名やパスワード、言語、カーネルなどのビルド時に指定された設定は全て変数から利用可能です。利用可能な変数は後々に解説します。</p>
+        <p>ただし、注意することが2つあります。</p>
+        <p>1つ目は「基本的にファイル作成は行わない」ということです。ファイルの内容までシェルスクリプトに書いてしまうとすぐにスクリプトが大きくなってしまいます。</p>
+        <p>その場合はairootfsでファイルを設置しましょう。ユーザー名やカーネルなどのビルドされるまでわからない情報をファイルに含める場合、<code>sed</code>と変数を利用して置き換えるのが最もかんたんです。</p>
+        <p>2つめはスクリプトの厳格さです。未定義の変数やコマンドを参照してしまうとエラーでビルドが停止してしまいます。</p>
+        <p>また、実行したコマンドが失敗した場合にもビルドが停止してしまいます。それらに気をつけてスクリプトを作成してください。</p>
+
+        <h3>ディスプレイマネージャの設定を行う</h3>
+        <p>ここは少々複雑になってしまいます。(ハヤオもこの方法にたどり着くまで時間がかかりました。)</p>
+        <p>まずはライブ環境の起動から、パスワードなどの入力を飛ばしてGUIを起動する手順を説明します。</p>
+        <p>Arch Linux系のOSはまず、カーネルが起動し最低限のファイルやドライバなどの読み込みを行った後、systemdと呼ばれるソフトを起動します。</p>
+        <p>このsystemdはがシステムを本格的に起動して様々な設定やソフトの起動を行います。(難しいので省略します。)</p>
+        <p>そしてsystemdはディスプレイマネージャが設定されていない場合はそのままCLIで起動します。</p>
+        <p>ここで、OSが起動した後に自動でGUIを立ち上げる方法が2つあることがわかります。</p>
+        <p>1つはsystemdからディスプレイマネージャを起動し、自動ログインを利用してデスクトップ環境を起動すること。</p>
+        <p>もう1つはCLIでの起動後に<code>.profile</code>などの起動時に自動で実行されるシェルスクリプトを利用して起動する方法。</p>
+        <p>先に結論を述べます。<b>必ず前者を利用してください。</b>理由は色々とあるので今から説明します。</p>
+        <p>まず、シェルスクリプトで単純にGUIを起動することは出来ません。シェルスクリプトで起動を行う場合、<code>xinit</code>と呼ばれるツールを利用して起動を行います。</p>
+        <p>実のところAlter Linux Beta2まではこの方法を採用していました。しかし、一部の環境で起動できなかったり認証が正常に行われなかったりと様々なバグが報告されました。</p>
+        <p>シェルスクリプトでGUIを起動すると、本来ディスプレイマネージャが自動で行っていることを自分でやる必要が有ります。(もちろんそれをシェルスクリプトでやるのは大変です。)</p>
+        <p>そのため、正常にログインや起動処理が行われないことが有ります。それぞれのディスプレイマネージャの自動ログイン機能を利用しましょう。</p>
+
+        
+        <h4>それぞれのディスプレイマネージャに自動ログインを設定する</h4>
+        <h5>LightDMの場合</h5>
+        <p>LightDMを使用する場合は<code>lightdm</code>というモジュールを利用することでかんたんに設定を行えます。</p>
+        <p>LightDMモジュールに含まれているのはあくまでもライブ環境用の設定であるということに注意してください。(インストール後の環境の設定は各自でやる必要があります。)</p>
+        <p>先程の設定ファイルに<code>lightdm</code>モジュールを追加した後、<code>airootfs.any/etc/lightdm</code>にGreeterなどの通常と同じ設定ファイルを置いてください。</p>
+        <p>この設定部分はXfceなどの他のチャンネルを参考にすればできると思います。</p>
+
+        <h3>ユーザーディレクトリのファイルを操作する</h3>
+        <p>~/内のファイルを上書き、追加する場合は注意することが有ります。</p>
+        <p>詳しくは<a href="/buildmydist-2/pages/misc/skeldir">ユーザーディレクトリのファイルを操作するには</a>を参照してください。</p>
+
+        <h3>様々な設定ファイルを作成する</h3>
+        <p>実際にディストリビューションにデフォルトで適用する設定ファイルを作成します。</p>
+        <p>詳しくは<a href="/buildmydist-2/pages/misc/create-config-file">GUIソフトの設定ファイルを作成する方法</a>を参照してください。</p>
+
+        <h3>GUIの設定をカスタマイズする</h3>
+        <p>今回はOpenBoxをウィンドウマネージャとして採用していますが、OpenBoxのデフォルト設定はあまりにも味気ないため設定をカスタマイズします。</p>
+        <p>Linuxでは設定はすべてファイルに保存されるので、OpenBoxの適切な設定ファイルをairootfsで配置すれば問題ありません。</p>
+        <p>設定を行うためのさらなる方法はArchWikiや<a href="/buildmydist-2/pages/misc/create-config-file">GUIソフトの設定ファイルを作成する</a>を参照してください。</p>
+
+        <h2>ブートローダーの背景を設定する</h2>
+        <p>ここまでくればもう完成は目前です!</p>
+        <p>もうここまできた人は何度か自分のチャンネルをビルドしていると思いますが、必ず気になることが有ります。</p>
+        <p>isoを最初に起動したときのブートローダーの背景です。</p>
+        <p>ブートローダーはSysLinuxというもので構成されており、設定ファイルもちょっと複雑になっています。</p>
+        <p>しかしAlterISO3には背景をかんたんに変更できる仕組みがあります。</p>
+        <p>チャンネルディレクトリ直下に<b>640x480でpng形式</b>の画像を<code>splash.png</code>という名前で設置するだけです。</p>
+        <p>画像を作成する参考にAlter Linuxのものを載せておきます。</p>
+        <p><img src="/buildmydist-2/pages/alteriso3/customize/images/splash.png" alt="起動画面"></p>
+        <p>今回はデフォルトのものをそのまま使うので特に画像の配置は行いません。</p>
+
+        <h2>完成したチャンネルをビルドする</h2>
+        <p>これでチャンネルは完成です。といってもこれで終わりではなく含めるパッケージやファイルなぞの設定を色々行って調整してください。</p>
+        <p>完成したら前章と同じようにビルドをしてみましょう。</p>
+        <p>文章で説明しただけなのでわかりにくい部分などがあったら筆者まで連絡してください。</p>
+
+        <h2>最後に</h2>
+        <p>ビルド時のエラーなどは以下を参照してください。</p>
+        <p><a href="/buildmydist-2/pages/alteriso3/error/">AlterISOの主なエラーと対処法</a></p>
+        <p>また、機能の要望やスクリプトのバグなどは以下に報告してください。</p>
+        <p><a href="https://github.com/FascodeNet/alterlinux/issues">FascodeNet/alterlinux - Issues</a></p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
+
diff --git a/buildmydist-2/pages/alteriso3/error/index.php b/buildmydist-2/pages/alteriso3/error/index.php
new file mode 100644 (file)
index 0000000..9ba49c7
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Alter Linux - エラー";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "alteriso3";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>エラーが出たときは</h2>
+        <p>AlterISO3でよく遭遇するエラーをまとめています。</p>
+        <p>わからないことや、書かれていないエラーがあった場合は管理人に知らせてください。</p>
+        <p>環境や状況によって異なる箇所は「~~」で表記しています。</p>
+
+        <h2>~~ default.conf was not found.</h2>
+        <p>正常にソースコードの取得が出来てないか、設定ファイルを削除してしまっています。</p>
+        <p><code>buiild.sh</code>は<code>default.conf</code>が無いと正常に動作しません。</p>
+
+        <h2>The variable name ~~ is empty.</h2>
+        <p>~~の変数が空になっています。設定ファイルを確認して正しい値を設定してください。</p>
+        <p>正しい値を設定しているにも関わらずこのエラーが出る場合はバグの可能性が有るのでIssueを作成してください。</p>
+
+        <h2>The variable name ~~ is not of bool type.</h2>
+        <p>~~の変数に不正な値が設定されています。設定ファイルを確認して正しい値を設定してください。</p>
+        <p>正しい値を設定しているにも関わらずこのエラーが出る場合はバグの可能性が有るのでIssueを作成してください。</p>
+
+        <h2>~~ is not installed.</h2>
+        <p>ビルドに必要なパッケージがインストールされていません。yayやpacmanを使用してインストールしてください。</p>
+
+        <h2>~~ channel does not support current architecture.</h2>
+        <p>指定されたチャンネルとアーキテクチャの組み合わせが正しくありません。</p>
+        <p>チャンネルのアーキテクチャファイルや、ビルドオプション、設定ファイルを確認してください。</p>
+
+        <h2>This kernel is currently not supported on this channel or architecture</h2>
+        <p>指定されたカーネルとアーキテクチャの組み合わせが正しくありません。</p>
+        <p>チャンネルのカーネルファイルや、ビルドオプション、設定ファイルを確認してください。</p>
+
+        <h2>Invaild compressors ~~</h2>
+        <p>指定された圧縮方式が間違っています。</p>
+        <p>
+            <div class="code language-shell">./build.sh -h</div>を実行して利用可能な圧縮方式を確認してください。
+        </p>
+
+        <h2>This option is obsolete in AlterISO 3. To use Japanese, use "-l ja".</h2>
+        <p><code>-j</code>オプションはAlterISO 2で開始されたオプションです。変わりに<code>-l ja</code>を使用してください。</p>
+
+        <h2>There is no git directory. You need to use git clone to use this feature.</h2>
+        <p><code>--gitversion</code>を利用するには<code>git clone</code>でソースコードを取得し、<code>.git</code>ディレクトリが有る必要があります。</p>
+        <p>ディレクトリを削除してしまっていないか、ソースコードをzipでダウンロードしていないかを確認してください。</p>
+
+        <h2>Invalid argument ~~</h2>
+        <p>利用できない引数を指定しています。</p>
+        <p>
+            <div class="code language-shell">./build.sh -h</div>を実行して利用可能な引数を確認してください。
+        </p>
+
+        <h2>This channel does not support Alter ISO 3.</h2>
+        <p>このチャンネルはAlterISO3では利用できません。旧バージョンのAlterISOをダウンロードしてください。</p>
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/alteriso3/index.php b/buildmydist-2/pages/alteriso3/index.php
new file mode 100644 (file)
index 0000000..6e7c558
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Alter Linux - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "alteriso3";
+        $description = "Alter LinuxをカスタマイズしてFascodeNetworkが開発したarchiso派生のAlterISO3を使用してArch Linux派生のディストリビューションを開発します。";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>Alter Linuxについて</h2>
+        <p>Alter LinuxはArch LinuxをベースにFascode Networkが開発しているディストリビューションです</p>
+        <p>CLIに特化しているArchisoを基に独自のAlterISO3というツールを開発しました。</p>
+        <p>AlterISO3ではArchisoでできないことをコードを書かずにかんたんに実行できるようにする工夫がなされています。</p>
+
+        <h2>AlterISO3で開発を行う具体的なメリット</h2>
+        <ul>
+            <li>一般ユーザーの作成を行える</li>
+            <li>カーネルの種類をかんたんに切り替えられる</li>
+            <li>多言語のビルドに対応</li>
+            <li>AUR上に存在しているパッケージをインストール可能</li>
+            <li>開発に必要なツールが揃っている</li>
+            <li>基本的な設定ファイルは自動で配置される</li>
+            <li>chroot環境で任意のコマンドを実行して柔軟に設定を行える</li>
+        </ul>
+        <p>誰でもディストリを開発しやすいように設計されており、Archisoよりはるかにかんたんに開発できます。</p>
+
+        <h2>開発環境の構築</h2>
+        <p>AlterISO3を利用するにはArch Linux環境が必須になります。</p>
+        <p>Manjaroでもおそらく問題はありませんが一切の検証はしていません。</p>
+        <p>Alter LinuxかArch Linuxがインストールされた環境を用意してください。</p>
+        <p>また、パッケージリストやシェルスクリプトの操作があるのである程度のエディタも用意しておきましょう。</p>
+
+        <h2>開発を始める</h2>
+        <p>それでは次のページからAlterISO3の使い方を解説します。</p>
+        <p><a href="./basic-usage/">次のページに進む</a></p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/alteriso3/relation.php b/buildmydist-2/pages/alteriso3/relation.php
new file mode 100644 (file)
index 0000000..f108ea1
--- /dev/null
@@ -0,0 +1,6 @@
+<ul>
+    <li><a href="/buildmydist-2/pages/alteriso3/index.php">AlterISO3 トップ</a></li>
+    <li><a href="/buildmydist-2/pages/alteriso3/basic-usage/">AlterISO3の使い方</a></li>
+    <li><a href="/buildmydist-2/pages/alteriso3/error/">AlterISOの主なエラーと対処法</a></li>
+    <li><a href="/buildmydist-2/pages/alteriso3/customize/">AlterISO3のカスタマイズ方法</a></li>
+</ul>
diff --git a/buildmydist-2/pages/archiso/index.php b/buildmydist-2/pages/archiso/index.php
new file mode 100644 (file)
index 0000000..cd6e7e8
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Arch Linux - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "archiso";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>Arch Linuxについて</h2>
+        <p>Arch Linuxはarchisoというシェルスクリプトを利用してビルドします。</p>
+        <p>設定プロファイルを追加することによって、カスタマイズを行います。</p>
+        <p>ArchisoはあくまでCLIのArch Linux公式のライブCDをビルドすることに特化しているため、初心者にはとっつきにくいものになっています。</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/common/index.php b/buildmydist-2/pages/common/index.php
new file mode 100644 (file)
index 0000000..c6a8cd7
--- /dev/null
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "共通のこと";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "common";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>ディストリ開発を始める準備</h2>
+        <p>どのOSをベースにするかに関わらず共通の準備があります。方針を決めたり開発環境を整えたり...とね</p>
+        
+        <h2>作成するもののコンセプトを決める</h2>
+        <p>まずはコンセプトを決めましょう。それ次第で内容が大きく変わってきます。</p>
+        <ul>
+            <li>CLIの緊急時用のOS</li>
+            <li>自分が好きなパッケージだけを入れていつもの環境</li>
+            <li>特定のハードウェアに最適化したもの</li>
+            <li>最低限のGUIだけで構築した環境</li>
+        </ul>
+        <p>などの目的とターゲットをよくよく考えて決める必要が有ります。おすすめは「自分のメイン環境に近いカスタマイズを施す」です。</p>
+        <p>OSのインストール後やライブCDの起動時に自分がいつも使う環境が整っているというのは一種の感動があります。</p>
+
+        <h2>開発環境の構築</h2>
+        <h3>必要なもの</h3>
+        <p>必要なものがそれなりにいろいろとあるので、順番に見ていきます。</p>
+        <p>まずは「物的」に必要なものです</p>
+        <ul>
+            <li>仮想マシンと総合開発環境を動かせる程度の性能のあるマシン</li>
+            <li>最低でも500GBの容量のディスク(できればSSDが良い)</li>
+            <li>仮想化ソフトウェア(Qemu、VirtualBox、VMware Workstation Player)</li>
+            <li>実機起動用のDVD-R(W) or USBメモリ(3.0以降で8GB以上を推奨)</li>
+        </ul>
+
+        <p>次に能力的に必要なものです</p>
+        <ul>
+            <li>中学生程度の英語を読める程度の能力 or エラーやドキュメントなどを機械翻訳して読める程度の能力</li>
+            <li>CLI画面でコマンドを打ったりログを見たりできる程度の能力</li>
+            <li>シェルスクリプトで順次処理を実行できる程度の能力</li>
+            <li>パッケージとデスクトップ環境をカスタマイズできる程度の能力</li>
+            <li>(場合によっては)自分でパッケージを開発できる程度の能力</li>
+            <li>(開発を本格的に行いたい場合は)そこそこのシェルスクリプトが書ける程度の能力</li>
+            <li>このサイトの内容を理解できる程度の能力</li>
+        </ul>
+        
+        <p>最後に時間的に必要なことです</p>
+        <ul>
+            <li>(PCの性能にもよるが)一度のビルドにかかる時間(10分から2時間ほど?)</li>
+            <li>定期的にパッケージを更新する時間(isoファイルに含めるパッケージを更新する)</li>
+            <li>(特にGnomeなどは)最新の上流の更新に追従して互換性の無くなった変更などに対応する時間</li>
+        </ul>
+        <p>個人で自分だけで使う場合はそこまで重要でもないですが、ネット上で配布などをする場合にはとても重要になります</p>
+        <p>詳細を下でいろいろと見ていきます。</p>
+
+        <h4>仮想マシンと総合開発環境を動かせる程度の性能のあるマシン</h4>
+        <p>ディストリのビルドは全てスクリプトで自動化して行いますが、スクリプトは主に以下のことを行っています</p>
+        <p>(Ubuntuだけはスクリプトの内容は大きく異なります。スクリプトがやってくれないことがあるのでそれを自分で行います。)</p>
+        <ol>
+            <li>ベースを作成(pacstrap baseやdebootstrapなど)</li>
+            <li>
+                追加のパッケージをインストール<br>
+                AlterISOなどのAURパッケージのビルドも行うのでここでかなりの時間を使います
+            </li>
+            <li>ライブ環境で起動するためのブートローダーの設定</li>
+            <li>ライブ環境で起動するための内部設定をchrootで実行</li>
+            <li>作成されたrootfsをSquashFsに圧縮</li>
+            <li>作成されたブートローダー用のファイルとSquashfsを集めてディスクイメージを作成</li>
+            <li>(AlterISOのオプション次第ではこの後にrootfsをtarballにまとめたりする)</li>
+        </ol>
+        <p>Linuxまるまるのパッケージを全てダウンロードし、それを全て展開した後にまた圧縮し直すという作業を行いますので、かなりのCPUとネットワーク回線が要求されます。</p>
+        <p>筆者のCPUはSandy世代でとても高性能とは言えないので山D(Fascodeのえらいひと)にサーバを借りてビルドしています</p>
+        <p>最低でも3GB以上のパッケージをダウンロードし、tarの圧縮を快適に行えるPCを用意しましょう</p>
+        <p>また、(Ubuntuなどでは必須になりますが)OSを実行する仮想環境も必要になってきます</p>
+        <p>仮想環境については<a href="/buildmydist-2/pages/misc/virtual/">こちら</a>を参照してください</p>
+
+        <h4>最低でも500GBの容量のディスク</h4>
+        <p>先程のビルドの要約を見るとわかりますが、主な処理はパッケージのインストールとコマンド実行です。</p>
+        <p>ダウンロードしたパッケージをキャッシュしたり、作業ディレクトリに展開したりとかなり大量のディスクを使用します。</p>
+        <p>さらに、ビルドしたisoは約2~3GBもあります。過去のバージョンなども保存っしておくとあっという間にHDDを食ってしまいます</p>
+
+        <h4>仮想化ソフトウェア(Qemu、VirtualBox、VMware Workstation Player)</h4>
+        <p>ビルドしたOSは基本的に仮想環境でテストを繰り返すことになります。</p>
+        <p>複数の仮想環境でテストをして、環境依存の問題などを確認するために複数の仮想環境でテストを行います。</p>
+        <p>全て無料で利用できるソフトウェアで、様々な用途に利用できるのでインストールしておきましょう。</p>
+        <p>詳しくは<a href="/buildmydist-2/pages/misc/virtual/">こちら</a>を参照してください</p>
+
+        <h4>中学生程度の英語を読める</h4>
+        <p>Linuxのエラーはほぼ全て英語で書かれています。そのため英語が読めないと何も出来ません</p>
+        <p>といっても、<code>No such file or directory</code>というようなかんたんな英語しか無いのでそこまで心配する必要はありません。どうしても英語が苦手という人はGoogle翻訳とDeeplを使うとかなり正確な翻訳を得ることが出来ます。</p>
+        
+
+        <h4>コマンドを打ったりログを見たりできる</h4>
+        <p>ビルドスクリプトの実行や、デバッグなどはほとんどがCLI上での作業になります。(GUIが起動しない場合などで特に)</p>
+        <p>また、実機テストで起動しなかった場合やインストールに失敗した場合などのレスキュー作業もCLIになります。</p>
+        <p>まだLinuxになれきってない人は少々難しいかもしれません</p>
+        <p><code>ls</code>や<code>cd</code>、<code>cut</code>や<code>less</code>、<code>grep</code>などは覚えておきましょう</p>
+        <p>また、<code>systemctl</code>と<code>journald</code>もなれておくと良いでしょう</p>
+
+        <h4>シェルスクリプトで順次処理を実行できる</h4>
+        <p>特にArch Linuxやfedoraをベースとする場合に重要です。先程の構築の手順を見るとわかりますが、パッケージのインストール後にシステムの設定を行います。</p>
+        <p>このシステムの設定は全てシェルコマンドを実行して行われます。変数を扱える程度のシェルスクリプトの知識が必要になってきます。</p>
+
+        <h4>このサイトの内容を理解できる</h4>
+        <p>一番重要です。</p>
+
+        <h3>必要なソフトウェアのインストール</h3>
+        <p>最低限でもテキストエディタと仮想マシンが必要になります。</p>
+        <p>また、FedoraやArch、Alterをベースに開発を行う場合には実機で動作するLinuxが必要になります。</p>
+        <p>(よっぽどマシンスペックに自信があるのなら仮想マシンでもいいですが、性能が低いとビルドにものすごく時間がかかります)</p>
+        <p>Fedoraをベースに開発をするのなら実機のFedora、ArchやAlterで開発をするのなら実機のArchやAlter が必要になります。</p>
+        <p>(正確にはArch LinuxさえあればFedoraもカバーできるのですが、環境構築が大変なので割愛します)</p>
+        <br>
+        <p>おすすめのテキストエディタエディタはVisual Studio Codeですが、下手すると戦争になりかねないので自分の好きなものを使いましょう。間違ってもnotepad.exeはやめましょう。</p>
+        <p>(このサイトを読んでる人ならこれくらいの環境構築はかんたんだと思うので細かい説明は割愛します)</p>
+        <p>ベースとなるディストリによって準備するものも異なるので、それは各ページで解説を行います。</p>
+
+        <h3>ベースになるディストリを決めよう</h3>
+        <p>イチからlinuxディストリビューションを構築するのはものすごく大変です。</p>
+        <p>(Linux from Scratchというプロジェクトがあるので、「俺はどうしても1からがええんじゃ!」と言う方はそちらを参考にしてください。)</p>
+        <p>そのため、このサイトでは様々な主要ディストリを改造する形で開発を行っていこうと思います。</p>
+        <p>世の中には数え切れないほどのディストリがありますが、だいたい以下に分類することができます。</p>
+        <p>(厳密にはLinuxではないUnix系は省略します。また、あくまで大雑にですので細かい部分は異なります。)</p>
+        <ul>
+            <li>
+                <b>Debian系</b>
+                <ul>
+                    <li>
+                        Ubuntu系
+                        <ul>
+                            <li>Xubuntu</li>
+                            <li>Lubuntu</li>
+                            <li>Kubuntu</li>
+                            <li>Serene Linux</li>
+                        </ul>
+                    </li>
+                    <li>Kali Linux</li>
+                    <li>Kona Linux</li>
+                </ul>
+            </li>
+            <li>
+                <b>RHEL系</b>
+                <ul>
+                    <li>Redhat Enterprise Linux</li>
+                    <li>Cent OS</li>
+                    <li>Fedora</li>
+                    <li>RedStar OS</li>
+                </ul>
+            </li>
+            <li>
+                <b>Arch Linux系</b>
+                <ul>
+                    <li>Black Arch Linux</li>
+                    <li>Manjaro Linux</li>
+                    <li>Arch Linux ARM</li>
+                    <li>Artix Linux</li>
+                    <li>Alter Linux</li>
+                </ul>
+            </li>
+            <li>Slack Ware系</li>
+            <li>Gentoo Linux系</li>
+            <li>その他いろいろ(多いので割愛)</li>
+        </ul>
+        <p>主な違いはパッケージマネージャとリポジトリです。Arch Linux系はpacmanを採用しており、Debian系はaptになっています。</p>
+        <p>Arch Linuxは最新だけどちょっと不安定、Manjaroはバージョンは古いけど安定したパッケージ、Ubuntuは最適化されて安定したパッケージ...とそれぞれに特徴が有ります。</p>
+        <p>「とりあえず試しに作ってみたい」という人はUbuntuをおすすめしますが、いろいろ問題があります。(以下で詳しく説明します。)</p>
+        <p>そういったそれぞれの特徴を考えてどのディストリをベースにするかを決定しましょう。</p>
+        <p>また、このサイトで解説しているのはハヤオが開発したことがあるものだけです。GentooやSlackware、BSDなどの知識はほぼ皆無なのでこのサイトでは解説しません。</p>
+
+        <h4>Ubuntu系の問題点</h4>
+        <p>FedoraやArchは全てテキストベースのソースコードで管理することができます(すなわちGitなどのバージョン管理システムを使えます)</p>
+        <p>しかし、Ubuntu系だけは「実際に仮想環境上に構築されたものをisoファイルに直接圧縮する」というものになっています。</p>
+        <p>そのためバージョン管理がしにくく、また内部の最適化がしにくいという問題があります。長期的な開発には向いていないので注意してください。</p>
+
+        <h2>注意点</h2>
+        <p>ディストリを開発する際には必ずいくつかの注意点が有ります。</p>
+        <ul>
+            <li>個人情報を含まないようにする</li>
+            <li>再配布が可能なものかを確認する</li>
+            <li>GPLライセンスに違反していないかどうかを確認する</li>
+            <li>違法なものが含まれていないかどうかを確認する</li>
+            <li>様々なマシンで起動される可能性が有ることを十分に考慮する</li>
+            <li>不特定多数のユーザーが使用するということを忘れない</li>
+        </ul>
+        <p>ネットに一度上げたものは二度と消えないということを忘れないようにしましょう。</p>
+        <p>(個人的に最初期のSereneLinuxは黒歴史みたいなもんです)</p>
+
+        <h2>おわり</h2>
+        <p>ここまでお疲れ様でした。ディストリ開発を始める最初のステップはこれで終わりです。</p>
+        <p>それそれのディストリのページで次の手順に進みましょう。</p>
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/fedora33/index.php b/buildmydist-2/pages/fedora33/index.php
new file mode 100644 (file)
index 0000000..1a56168
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Fedora 33 - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "fedora33";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>Fedora 33 について</h2>
+        <p>fedoraはRHELから派生して開発されているディストリビューションです。</p>
+        <p>RHELのテストのような扱いになっており、Fedoraで新機能がテストされ、安定したものがRHELに取り込まれるという形になっています。</p>
+        <p>Fascode Networkで開発されているSerene Linuxは現在はFedoraベースで開発されています。</p>
+
+        <h2>Fedoraベースでディストリを開発するには</h2>
+        <p>Fedora 33をベースに開発する最もかんたんな方法は「LFBS」を使用することです。</p>
+        <p>LFBSは、Archisoに影響を受けてFascode Networkで開発を行っているスクリプト群の総称です。</p>
+        <p>(開発リーダーは<a href="https://twitter.com/kokkiemouse">kokkiemouse</a> で、ハヤオもちょこちょこ開発に参加しています)</p>
+        <p>LFBSを利用するとかんたんに派生ディストリを構築することができます。</p>
+
+        <div class="box-warning">
+            LFBSの開発はまだ初期段階です。仕様が確定したら追記を行います。
+        </div>
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/create-config-file/index.php b/buildmydist-2/pages/misc/create-config-file/index.php
new file mode 100644 (file)
index 0000000..6e1e59f
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "GUIソフトの設定ファイルを作成する方法";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+        $description = "";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>GUIソフトの設定ファイルを作成する</h2>
+        <p>nanoやVimなどの手動で設定ファイルを操作することを前提にしているソフトについては、どこの設定ファイルをいじったら良いのかが明確になっているためかんたんに編集できます。</p>
+        <p>しかし、デスクトップ環境やGUIソフトウェアなどは設定をGUIで行うことが前提な場合が多くなっています。(Linuxでは全ての設定が最終的にはファイルで保存されます。)</p>
+        <p>そのため、設定をどのように行い、どうやって必要なファイルだけを取り出して配置するかが重要になってきます。</p>
+        <p>今回はXfceやUlauncherといったツールの設定ファイルを取り出す方法を解説します。</p>
+
+        <div class="box-warning">
+            ブラウザやその系列のソフトウェア(Eletronを使用しているソフトウェアなど)のデータを保存することは大変危険です。<br>
+            思わぬところで個人情報は漏洩してしまう可能性が有ります。(ブラウザの設定ファイルは他のソフトよりダントツで複雑です。)
+        </div>
+
+        <h2>瀬底はいっそのことGUIでやる</h2>
+        <p>この記事を見ている人の大半がLFBSやArchiso、AlterISOなどでairootfsを設定するために来ていると思います。</p>
+        <p>まずは設定したいパッケージだけをパッケージリストに追加し、設定ファイルが不足している状態でビルドしてしまいましょう。</p>
+        <p>そしてビルドしたisoを仮想マシンで起動します。そしてそのまま普段どおりGUIソフトの設定を仮想環境内で行ってください。</p>
+        <p>後々でこの仮想環境内でGUIで作成した設定を取り出し、AlterISOやLFBSなどの適切な場所に配置します。</p>
+
+        <h2>まずはパッケージだけを追加する</h2>
+        <p>とりあえずパッケージだけを含めてビルドしましょう。ビルド方法についてはそれぞれのページの解説を参照してください。</p>
+        <p>その後、仮想環境で起動してください。</p>
+        <p>すなわち、この段階で最低限のGUIが仮想環境から起動可能である必要が有るということです。</p>
+        <p>もしGUIが起動できない場合はこの先に進むことが出来ないので注意してください。</p>
+
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/desktop-env/index.php b/buildmydist-2/pages/misc/desktop-env/index.php
new file mode 100644 (file)
index 0000000..82abba3
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "デスクトップ環境について";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>デスクトップ環境とは</h2>
+        <p>Linuxでは、Winwowsと違ってOS本体とGUIが完全に分離しています。そのため、OSを変更することなく全く違ったUIを使うことができます。</p>
+        <p>Linuxの基本的な考え方は「モジュール化」です。1つのソフトには1つの仕事しかさせません。</p>
+        <p>そうすることでユーザーは、例えば「タスクバーを表示するソフト」、「ウィンドウを管理するソフト」といったものを自由に選んで使うことができます。</p>
+        <p>しかしそれらを1つ1つ選んで設定するのは初心者には大変で難解です。そのためそういったソフトをまとめて簡単に使いやすくしたものがあります。</p>
+        <p>それが「デスクトップ環境」です。デスクトップ環境を変更するとランチャーやファイルマネージャー、ウィンドウマネージャーといったものがすべて入れ替わるため全く違った操作感になります。</p>
+        <p>逆に言えば、ディストリビューションを変更しても(Arch LinuxからUbuntuに変えても)デスクトップ環境さえ一緒ならほぼ同じ操作感を実現することもできます。</p>
+        <p>(これを利用して本来Ubuntuベースで開発されていたSerene Linuxはほぼ操作性を変更することなくFedora版やArch Linux版が開発されています。)</p>
+
+        <h2>ここでは</h2>
+        <p>このページでは主流のデスクトップ環境の名前と特徴、簡単な開発の経緯を紹介します。</p>
+        <p>ひとことにデスクトップ環境といっても様々なものがあり、それぞれで目指しているものに違いがあります。</p>
+        <p>いろんなデスクトップ環境を試して自分に一番あっているものを探してみてください。</p>
+
+        <h2>技術的な細かい説明</h2>
+        <p>GUIは「ディスプレイサーバ」で描写されます。Linuxでは現在、「Xorg」が主流です。最近では新しいものとして「Wayland」があるようです。個人的にはまだWaylandは不安定なので当分の間はXorgで良いと思っています。</p>
+        <p>しかし、ディスプレイサーバはあくまで「GUIを描写する機能を提供」するだけなので、ディスプレイサーバだけではGUIは利用できません。そこでソフトをウィンドウにして表示できるようにするのが「ウィンドウマネージャ」です。ソフトの「最大化」「最小化」「閉じる」などのボタンとその機能を提供するのがウィンドウマネージャです。ウィンドウマネージャは様々な種類があり、「xfwm4」や「i3」「awesome」などが有名です。</p>
+        <p>デスクトップ環境はあくまでツール群のため、掛け合わせることもできます。(依存関係などでできない場合もありますが)例えば、タイル型ウィンドウマネージャである「i3」とXfce関連を掛け合わせることもできます。(設定ファイルをいろいろ修正する必要がありますが)</p>
+
+        <h2>デスクトップ環境の種類と特徴</h2>
+
+        <h3>Gnome3</h3>
+        <p>Linuxで最初に本格的に開発されたデスクトップ環境がGnomeです。</p>
+        <p>GnomeはUbuntu 20.04にもデフォルトで採用されており、実績も多いことで有名です。</p>
+        <p>Gnomeには主にGnome 2とGnome 3があり、この2つは全くの別物です。</p>
+        <p>Gnome 3は現在の最新のGnomeです。JavaScriptをはじめとするウェブ技術で動作しており、独自の拡張機能を導入することができます。</p>
+        <p>現在で最も使用されているデスクトップ環境で、拡張機能にも様々な種類があります。</p>
+        <p>しかしその機能の豊富さから軽量ではないのが難点です。またディストリビューションを開発する場合にも難易度は高いデスクトップ環境です。</p>
+        <p>次にGnome 2についてです。現在ではGnome 2の公式の開発は終了し、現在はMateという名前で開発が続いています。</p>
+        <p>Gnome 2はGnome 3と違ってウェブ技術は使用されていません。</p>
+
+        <h3>Mate</h3>
+        <p>先程のGnome 2をベースに開発が続いているデスクトップ環境です。</p>
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/display-manager/images/gdm.jpg b/buildmydist-2/pages/misc/display-manager/images/gdm.jpg
new file mode 100644 (file)
index 0000000..3e1f819
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/gdm.jpg differ
diff --git a/buildmydist-2/pages/misc/display-manager/images/lightdm-gtk-greeter.png b/buildmydist-2/pages/misc/display-manager/images/lightdm-gtk-greeter.png
new file mode 100644 (file)
index 0000000..1adec1e
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/lightdm-gtk-greeter.png differ
diff --git a/buildmydist-2/pages/misc/display-manager/images/lightdm-slick-greeter.jpeg b/buildmydist-2/pages/misc/display-manager/images/lightdm-slick-greeter.jpeg
new file mode 100644 (file)
index 0000000..6b5bb5c
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/lightdm-slick-greeter.jpeg differ
diff --git a/buildmydist-2/pages/misc/display-manager/images/lightdm-webkit2-greeter.jpg b/buildmydist-2/pages/misc/display-manager/images/lightdm-webkit2-greeter.jpg
new file mode 100644 (file)
index 0000000..7ebc0b8
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/lightdm-webkit2-greeter.jpg differ
diff --git a/buildmydist-2/pages/misc/display-manager/images/lxdm.png b/buildmydist-2/pages/misc/display-manager/images/lxdm.png
new file mode 100644 (file)
index 0000000..8008fba
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/lxdm.png differ
diff --git a/buildmydist-2/pages/misc/display-manager/images/sddm-default-theme.jpg b/buildmydist-2/pages/misc/display-manager/images/sddm-default-theme.jpg
new file mode 100644 (file)
index 0000000..83934ee
Binary files /dev/null and b/buildmydist-2/pages/misc/display-manager/images/sddm-default-theme.jpg differ
diff --git a/buildmydist-2/pages/misc/display-manager/index.php b/buildmydist-2/pages/misc/display-manager/index.php
new file mode 100644 (file)
index 0000000..29eee3f
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "ディスプレイマネージャ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+        $description = "";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>ディスプレイマネージャについて</h2>
+        <p>ディスプレイマネージャはログイン画面の処理を担当しているソフトウェアです。</p>
+        <p>内部的にはユーザーの認証とログイン、デスクトップ環境の起動などを行います。</p>
+        <p>内部的な面はどのディスプレイマネージャも差がないので、主にGUI部分でどれを使うか決めます。</p>
+
+        <h2>主なディスプレイマネージャ</h2>
+        <h3>LightDM</h3>
+        <p>最もよく使われている(印象がある)ディスプレイマネージャです。</p>
+        <p>「Greeter」という概念によって内部的なログイン処理とGUIのログイン画面を分離させることによって、圧倒的なカスタマイズ性能を誇ります。</p>
+        <p>動作も非常に軽快で、特別な理由がない限りはLigthDMを選択しておけば間違いありません。</p>
+        <p>(Greeterもたくさんの種類があるので、別のページで解説をしようと思います。)</p>
+        <p>ただし、設定を変更する場合は設定ファイルをroot権限で操作する必要があります。(一部GreeterはGUIが用意されています。)</p>
+        <br>
+        <p>以下のスクリーンショットは全てLightDMです。</p>
+        <p>
+            <img src="/buildmydist-2/pages/misc/display-manager/images/lightdm-gtk-greeter.png" alt="GTK-Greeter">
+            <img src="/buildmydist-2/pages/misc/display-manager/images/lightdm-slick-greeter.jpeg" alt="Slick-Greeter">
+            <img src="/buildmydist-2/pages/misc/display-manager/images/lightdm-webkit2-greeter.jpg" alt="Webkit2-Greeter">
+        </p>
+
+        <h3>GDM3</h3>
+        <p>デスクトップ環境でも有名なGnomeが開発しているディスプレイマネージャです。</p>
+        <p>モダンなUIでGnomeと相性がいいことが特徴ですが、カスタマイズをするにはdconfを操作する必要があり少々面倒です。</p>
+        <p>(現在ハヤオがコマンドラインでかんたんに設定を行えるツールを開発していたりします)</p>
+        <p>lightDmより動作も多少重いという印象が有ります。GDM3はGnome3に伴って大きく書き直されています。</p>
+        <p>
+            <img src="/buildmydist-2/pages/misc/display-manager/images/gdm.jpg" alt="GDM">
+        </p>
+
+        <h3>SDDM</h3>
+        <p>Simple Desktop Display Managerの略です。KubuntuやPlasmaのデフォルトのディスプレイマネージャです。</p>
+        <p>QMLを利用したテーマをサポートしているという点ではLightDMと似ています。</p>
+        <p>設定をGUIから行えるというのも特徴です。</p>
+        <p>
+            <img src="/buildmydist-2/pages/misc/display-manager/images/sddm-default-theme.jpg" alt="">
+        </p>
+
+        <h3>LXDM</h3>
+        <p>Lxdeのために開発されたディスプレイマネージャ。(その割にはLxdeはLightDMと一緒に使われてるような)</p>
+        <p>GTK+2で書かれた軽量なディスプレイマネージャです。<s>正直ダサいのであまり使いみちはないような</s></p>
+        <p>
+            <img src="./images/lxdm.png" alt="LXDM">
+        </p>
+
+        <h3>KDM</h3>
+        <p>昔の記事ではKDMが紹介されていますが、KDMはKDE 4以前で使用されていたディスプレイマネージャで、現在は既に開発が終了しています。</p>
+
+        <h3>SLiM</h3>
+        <p>最小限の依存関係で動作する非常に軽量なディスプレイマネージャ。2014年で開発が終了しているので使わないほうがいいです。</p>
+
+        <h3>MDM</h3>
+        <p>Gnome3に伴って大きく変更されたGDM3の前のバージョン(GDM2)のフォークです。</p>
+        <p>2021年2月現在、2018年から更新されてないので使用しないほうが良いと思います。</p>
+
+
+        <h3>NoDM</h3>
+        <p>NoDMはGUIを提供しないディスプレイマネージャです。CLIによる自動化に特化しています。</p>
+        <p>しかし2021年2月現在、2019年から開発が止まっているようなので使用はおすすめしません。</p>
+        <p>ほとんど同じかそれ以上のことをLightDMの自動ログインで実現することができます。</p>
+
+        <h2>結局どれが一番良いのか</h2>
+        <p>ディスプレイマネージャはセキュリティ的にとても重要な部分です。</p>
+        <p>そのため開発が終了しているディスプレイマネージャは使うべきではありません。</p>
+        <p>それを踏まえた上で使うべきディスプレイマネージャは「LightDM」「GDM」「SDDM」のどれかになります。</p>
+        <p>この3つは現在も活発に開発が続けられているため、どれを選んでも問題ないでしょう。</p>
+        <p>あとはパッケージやその依存関係の大きさ、見た目、設定のしやすさなどで決めると良いと思います。</p>
+
+        <h2>今使ってるディスプレイマネージャを調べる</h2>
+        <p>systemdは現在有効化されているディスプレイマネージャへのシンボリックリンクを作成します。</p>
+        <p><code>readlink</code>でシンボリックリンクが指している先を探し、<code>cut</code>と<code>basename</code>で名前のみを抽出しています。</p>
+        <div class="code language-shell">
+            basename $(readlink /etc/systemd/system/display-manager.service) | cut -d '.' -f 1
+        </div>
+
+        <h2>それぞれのディスプレイマネージャについての情報</h2>
+        <p>追加してほしいサイトがあれば管理人までお願いします。</p>
+
+        <h3>LightDM</h3>
+        <ul>
+            <li><a href="https://wiki.archlinux.jp/index.php/LightDM">LightDM - ArchWiki</a></li>
+            <li><a href="https://github.com/canonical/lightdm">LightDM ソースコード</a></li>
+            <li><a href="https://wiki.gentoo.org/wiki/LightDM/ja">LightDM - Gentoo Wiki</a></li>
+            <li><a href="https://ja.wikipedia.org/wiki/LightDM">LightDM - Wikipedia</a></li>
+        </ul>
+
+        <h3>GDM3</h3>
+        <ul>
+            <li><a href="https://wiki.archlinux.jp/index.php/GDM">GDM - ArchWiki</a></li>
+            <li><a href="https://wiki.gnome.org/Projects/GDM">GDM Project 公式サイト</a></li>
+            <li><a href="https://help.gnome.org/admin/gdm/">GDMのドキュメント</a></li>
+        </ul>
+
+
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/gtk-icon-theme/index.php b/buildmydist-2/pages/misc/gtk-icon-theme/index.php
new file mode 100644 (file)
index 0000000..b88a6bc
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "GTKのアイコンとテーマについて";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>GTKテーマとは</h2>
+        <p>GTK+はLinuxで主に使用されているGUIツールキットです。(GUIをかんたんに描写するツールだと思ってください。)</p>
+        <p>いろいろなテーマがネット上に無料で公開されており、アプリの見た目や色を一括で大きく変更することができます。</p>
+        <p>Serene Linuxでは「Numix」、Alter Linuxでは「Adapta」や「Arc」を使用しています。</p>
+
+        <h2>アイコンテーマとは</h2>
+        <p>ランチャーやUIで使われているアイコンパックです。Androidのアイコンパックのようなものです。</p>
+        <p>アイコンテーマを導入することで見た目を大きく変更することができます。</p>
+        <p>Serene Linuxでは「Paper Icon theme」、Alter Linuxでは「Papirus Icon」「Inverse Icon theme」を使っています。</p>
+        
+        <h2>自分お好きなテーマを探す</h2>
+        <p>自分の好きなテーマをネット上で探しましょう。テーマのライセンスが再配布可能で、GTK2と3に準拠しているものなら何でも使用できます。</p>
+        
+        <p>テーマは様々な場所で公開されていますが、主に以下のようなサイトで探すことが出来ます。</p>
+
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/index.php b/buildmydist-2/pages/misc/index.php
new file mode 100644 (file)
index 0000000..1102ac0
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "カスタマイズ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>このページは何?</h2>
+        <p>Linuxのカスタマイズをする上で必要な情報です。</p>
+        <p>カスタマイズはほとんどがOSに関係なく、共通しているのでこのページにまとめています。</p>
+        <p>初めてLinuxを使う人も参考にしてみてください。</p>
+        <?php
+            $relation = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/pages/$distro/relation.php";
+            if(file_exists($relation)){
+                echo "<h2>リンク集</h2>";
+                include($relation);
+            }
+        ?>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/pkgbuild/index.php b/buildmydist-2/pages/misc/pkgbuild/index.php
new file mode 100644 (file)
index 0000000..a5edd53
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "pacmanのパッケージを作る";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>pacmanのパッケージを作る</h2>
+        <p>pacmanのパッケージを作ると、ユーザーにアップデートを配布したり、開発者の管理が楽になったりします。</p>
+        <p>中でもArch Linuxが採用しているパッケージマネージャのpacmanはものすごくかんたんにパッケージを作成できます。</p>
+        <p>以下はそのパッケージを開発するためのまとめです。</p>
+
+        <h2>makepkgとPKGBUILD</h2>
+        <p>pacmanのパッケージファイルは<code>.pkg.tar.xz(.pkg.tar.zst)</code>という拡張子のアーカイブファイルです。</p>
+        <p>そしてそのパッケージをコンパイルや圧縮を自動化するための仕組みがmakepkgとPKGBUILDです。</p>
+        <p>makepkgはコマンドの名前でPKGBUILDはファイル名です。</p>
+        <p>makepkgコマンドによってPKGBUILD(シェルスクリプト)の内容を読み取り、パッケージを作成します。</p>
+        <p>つまり、PKGBUILDファイルを書けばpacmanのパッケージを作ることが出来ます。</p>
+
+        <h2>PKGBUILDの構造</h2>
+        <p>PKGBUILDの中身は完全なシェルスクリプトです。(何ならmakepkgコマンドもBashで書かれています。)</p>
+        <p>PKGBUILDは変数と関数の定義で構成されています。</p>
+        <h3>PKGBUILDで定義するべき変数</h3>
+        <p>最低限、必ず定義する変数と状況によって定義する変数があります。</p>
+        <p>正式な仕様は<a href="https://wiki.archlinux.jp/index.php/PKGBUILD">ArchWiki</a>を参照してください。</p>
+        <h3>PKGBUILDで定義できる関数</h3>
+        <p>PKGBUILDは変数を読み取ったあと、設定されている関数を順番に実行します。</p>
+        <p>設定できる、するべき関数は<a href="https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90#PKGBUILD.E3.81.AE.E4.BD.9C.E6.88.90">ArchWiki</a>を参照してください。</p>
+        <h3>知っておくと便利なこと</h3>
+        <p>PKGBUILDのいくつかできることがあります。(詳細は各自で検索してください。後々追記すると思います。)</p>
+        <ul>
+            <li>1つのPKGBUIDで複数のパッケージを作成できます。</li>
+            <li>アーキテクチャごとにsourceやchecksumを切り替えることができます。</li>
+            <li><code>$srcdir</code>と<code>$pkgdir</code>は自動て定義される変数で、「ソースが入っているディレクトリ」「実際にパッケージに含まれるディレクトリ」としてPKGBUILDから参照できます。</li>
+        </ul>
+        
+        <h2>作成されたパッケージが適切かどうかを検証する</h2>
+        <p><code>namcap</code>を使用してパッケージが適切かどうかを検証してください。</p>
+        <p>また<code>sudo pacman -U /path/to/pkg</code>を実行して実際にインストールしてみてください。</p>
+
+
+        <h2>作成されたパッケージをAURに投稿する</h2>
+        <p>作成されたPKGBUILDは誰でもかんたんに使えるようにAURに投稿することができます。</p>
+        <p>以下はそのための手順が記されたWikiへのリンク集です。</p>
+
+        <h3>パッケージガイドラインに沿っているかを確認する</h3>
+        <p>AURはユーザーが誰でもパッケージを投稿できるシステムです。秩序を守るためにガイドラインが有ります。</p>
+        <p>ガイドラインにそって適切なパッケージを作成してください。</p>
+        <p><a href="https://wiki.archlinux.jp/index.php/Arch_%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3">パッケージガイドラインはこちら</a></p>
+
+        <h3>AURに送信する</h3>
+        <p>PKGBUILDを送信するためにSSHの設定を最初に行う必要があります(初回だけです。2回目以降は必要ありません)</p>
+        <p>それらのやり方は全てArchWikiで解説されています。</p>
+        <p><a href="https://wiki.archlinux.jp/index.php/Arch_User_Repository#.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E3.82.92.E6.8A.95.E7.A8.BF.E3.81.99.E3.82.8B">AURに投稿するための準備とコマンドはこちら</a></p>
+
+        <h3>投稿ルールに従う</h3>
+        <p>パッケージガイドラインにも投稿のルールがあります。</p>
+        <p><a href="https://wiki.archlinux.jp/index.php/Arch_User_Repository#.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E3.81.AE.E6.8A.95.E7.A8.BF.E3.83.AB.E3.83.BC.E3.83.AB">投稿ルールはこちら</a></p>
+
+        <h2>PKGBUILDをAlterISO3に含める</h2>
+        <p>後々追記します。(現在開発中の機能です。)</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/qt5ct/images/qt5ct-1.png b/buildmydist-2/pages/misc/qt5ct/images/qt5ct-1.png
new file mode 100644 (file)
index 0000000..554795a
Binary files /dev/null and b/buildmydist-2/pages/misc/qt5ct/images/qt5ct-1.png differ
diff --git a/buildmydist-2/pages/misc/qt5ct/images/qt5ct-2.png b/buildmydist-2/pages/misc/qt5ct/images/qt5ct-2.png
new file mode 100644 (file)
index 0000000..b2ca73e
Binary files /dev/null and b/buildmydist-2/pages/misc/qt5ct/images/qt5ct-2.png differ
diff --git a/buildmydist-2/pages/misc/qt5ct/images/with-qt5ct-vlc.png b/buildmydist-2/pages/misc/qt5ct/images/with-qt5ct-vlc.png
new file mode 100644 (file)
index 0000000..cb02431
Binary files /dev/null and b/buildmydist-2/pages/misc/qt5ct/images/with-qt5ct-vlc.png differ
diff --git a/buildmydist-2/pages/misc/qt5ct/images/without-qt5ct-vlc.png b/buildmydist-2/pages/misc/qt5ct/images/without-qt5ct-vlc.png
new file mode 100644 (file)
index 0000000..c0ba24c
Binary files /dev/null and b/buildmydist-2/pages/misc/qt5ct/images/without-qt5ct-vlc.png differ
diff --git a/buildmydist-2/pages/misc/qt5ct/index.php b/buildmydist-2/pages/misc/qt5ct/index.php
new file mode 100644 (file)
index 0000000..42f8af8
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "GTKのデスクトップ環境でQtアプリを使う";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>GTKのデスクトップ環境でQtアプリを使う</h2>
+        <p>GTKがベースのデスクトップ環境でQtを使うと、見た目が古い感じになります。</p>
+        <p><img src="/buildmydist-2/pages/misc/qt5ct/images/without-qt5ct-vlc.png" alt="VLC without Qt5 on Xfce"></p>
+        <p>それを適切な設定を行うことでGTKテーマを適用することができます。</p>
+        <p><img src="/buildmydist-2/pages/misc/qt5ct/images/with-qt5ct-vlc.png" alt="VLC with Qt5 on Xfce"></p>
+        <p>この設定を行うための手順を説明します。</p>
+        <div class="box-warning">
+            AlterISO3で<code>share-extra</code>を使用する場合はこの設定は不要です。(自動で設定されます。)
+        </div>
+
+        <h2>ArchWiki</h2>
+        <p><a href="https://wiki.archlinux.jp/index.php/Qt_%E3%81%A8_GTK_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%96%E8%A6%B3%E3%81%AE%E7%B5%B1%E5%90%88">QtとGTKアプリケーションの外観の統合</a>も参照してください。</p>
+
+        <h2>警告</h2>
+        <p>このページではArch Linuxを前提に解説を行います。パッケージのインストールなぞはそれぞれのパッケージマネージャに適している方法ととってください。</p>
+
+        <h2>必要なパッケージをインストールする</h2>
+        <p>まずは必要なパッケージをインストールします。</p>
+        <p>AURからパッケージを取得するので必ずyayをインストールしておいてください。</p>
+        <p>yayはpacmanよりも多くのパッケージをインストールすることができるツールです。</p>
+        <p>yayのインストール方法については<a href="https://blog.fascode.net/2020/11/22/use-yay-bin/">こちら</a>を参照してください。</p>
+        <code class="code language-shell">
+            yay -S --noconfirm qt5ct qt5-styleplugins
+        </code>
+        <div class="box-warning">
+            <p>qt5ctは公式リポジトリから、qt5-stylepluginsはAURからインストールします。</p>
+            <p>AlterISO3で以下の設定を行う場合は注意しください。</p>
+        </div>
+
+        <h2>環境変数を設定する</h2>
+        <p>環境変数<code>QT_QPA_PLATFORMTHEME</code>を設定します。</p>
+        <p>
+            以下のファイルの末尾に
+            <code class="code language-shell">QT_QPA_PLATFORMTHEME=vlc</code>
+            と記述してください
+        </p>
+        <ul>
+            <li><code>/etc/bash.bashrc</code></li>
+            <li><code>/etc/skel/.profile</code></li>
+            <li><code>~/.profile</code></li>
+            <li>(zshを使っている人は) <code>/etc/zsh/zshenv</code></li>
+        </ul>
+        <p>いくつか存在しないファイルが有ると思うので無い場合は追記を行ってください。</p>
+        <p>fishなどのその他のシェルを設定している場合はそれぞれの適切な設定ファイルに追記を行ってください。</p>
+
+        <h2>qt5ctの設定を変更する</h2>
+        <p><img src="/buildmydist-2/pages/misc/qt5ct/images/qt5ct-1.png" alt="Qt5ct Screen Shot"></p>
+        <p>デフォルトではこのようになっています。これを...</p>
+        <p><img src="/buildmydist-2/pages/misc/qt5ct/images/qt5ct-2.png" alt="Qt5ct Screen Shot"></p>
+        <p>このように設定を変更し、qt5ctを再起動します。しっかりとGTKテーマが適用されていれば成功です。</p>
+        <h3>おまけ</h3>
+        <p>Qt5ctの設定ファイルは<code>~/.config/qt5ct/qt5ct.conf</code>にあります。</p>
+        <p>AlterISO3などで利用する場合に参考にしてください。</p>
+
+
+        <h2>終わり</h2>
+        <p>これで完了です。ターミナルからvlcなどのqtアプリを起動するとGTKテーマが適用されているはずです。</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/relation.php b/buildmydist-2/pages/misc/relation.php
new file mode 100644 (file)
index 0000000..395ae5a
--- /dev/null
@@ -0,0 +1,10 @@
+<ul>
+    <li><a href="/buildmydist-2/pages/misc/desktop-env">デスクトップ環境について</a></li>
+    <li><a href="/buildmydist-2/pages/misc/create-config-file">GUIソフトの設定ファイルを作成する</a></li>
+    <li><a href="/buildmydist-2/pages/misc/display-manager/">ディスプレイマネージャについて</a></li>
+    <li><a href="/buildmydist-2/pages/misc/gtk-icon-theme/">GTKのアイコンとテーマについて</a></li>
+    <li><a href="/buildmydist-2/pages/misc/pkgbuild/">pacmanのパッケージを作る</a></li>
+    <li><a href="/buildmydist-2/pages/misc/qt5ct/">GTKのデスクトップ環境でQtアプリを使う</a></li>
+    <li><a href="/buildmydist-2/pages/misc/skeldir/">ユーザーディレクトリを操作する</a></li>
+    <li><a href="/buildmydist-2/pages/misc/virtual/">仮想マシンについて</a></li>
+</ul>
diff --git a/buildmydist-2/pages/misc/skeldir/index.php b/buildmydist-2/pages/misc/skeldir/index.php
new file mode 100644 (file)
index 0000000..1c9b03a
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "ユーザーディレクトリを操作する";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>ユーザーディレクトリのファイルを操作するには</h2>
+        <p>そのまま<code>/home/</code>以下のファイルを操作する際は注意する必要があります。</p>
+        <p>インストーラによって設定されるユーザーディレクトリのパスは不特定多数だからです。</p>
+        <p>そのためデフォルトのユーザーディレクトリとして<code>/etc/skel</code>を利用します。</p>
+        <p>例えば<code>~/.zshrc</code>を設定したい場合は<code>/etc/skel/.zshrc</code>を書き換えます。</p>
+        <p><code>/etc/skel</code>は作成された(特殊なユーザー以外の)全てのユーザーのデフォルトのホームディレクトリになります。</p>
+        <div class="box-warning">
+            <p><code>/etc/skel</code>に自分のホームディレクトリをそのままコピーするのは絶対にやめてください。</p>
+            <p>そのままコピーすると、秘密鍵や認証情報などの公開してはいけないものまで含めてしまう可能性があります。</p>
+        </div>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/misc/virtual/images/vbox-1.png b/buildmydist-2/pages/misc/virtual/images/vbox-1.png
new file mode 100644 (file)
index 0000000..6ed509b
Binary files /dev/null and b/buildmydist-2/pages/misc/virtual/images/vbox-1.png differ
diff --git a/buildmydist-2/pages/misc/virtual/images/vmware-1.png b/buildmydist-2/pages/misc/virtual/images/vmware-1.png
new file mode 100644 (file)
index 0000000..863e26e
Binary files /dev/null and b/buildmydist-2/pages/misc/virtual/images/vmware-1.png differ
diff --git a/buildmydist-2/pages/misc/virtual/index.php b/buildmydist-2/pages/misc/virtual/index.php
new file mode 100644 (file)
index 0000000..182d248
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "仮想マシンについて";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "misc";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>仮想マシンについて</h2>
+        <h3>仮想マシンとは</h3>
+        <p>仮想マシンは実際のPCの上に別のPCを仮想的に作成するソフトウェアです。実際のPCを用意するより手軽に利用でき、構成の変更やOSのテストが容易に行えます。</p>
+        <p>ここでは主によく使用されている仮想化ソフトウェアとその基本的な用語について解説します。</p>
+
+        <h3>用語解説と仮想化ソフトウェアの種類</h3>
+
+        <h4>仮想化</h4>
+        <p>仮想マシンの中でOSを実行したり、実機で動いていたものを仮想マシンに移すことを仮想化と言います。</p>
+        <p>(最近は仮想マシンのことを仮想化とも言ったりするので結構そこらへんは曖昧になっているかもしれません)</p>
+
+        <h4>ホスト、ホストOS</h4>
+        <p>先程、仮想マシンは「実際のPCの上に別のPCを仮想的に作成する」といいました。その「実際のPC」のことを「ホスト」と呼びます。</p>
+        <p>また、そのホストで動いているOSのことを「ホストOS」と呼びます。</p>
+
+        <h4>ゲスト、ゲストOS</h4>
+        <p>ホストの反対がゲストになります。つまり仮想環境で動いているほうのことを指します。</p>
+        <p>例えば「Windows 10の上でUbuntuが動いている」という場合、Windows 10がホスト、Ubuntuがゲストになります。</p>
+
+        <h4>VirtualBox</h4>
+        <p><img src="./images/vbox-1.png" alt="VirtualBox"></p>
+        <p>Oracle社が開発する仮想化を行うソフトウェアです。WindowsとMac、Linux上で動作させることができます。</p>
+        <p>ホスト型と呼ばれる最も一般的な種類のものです。USBデバイスなどの管理がしやすいのが特徴です。</p>
+        <p>以下で紹介するVMwareと違ってオープンソースで開発されています。</p>
+        
+        <h4>VMware Workstation Player</h4>
+        <p><img src="./images/vmware-1.png" alt="VirtualBox"></p>
+        <p>VMware社が開発する仮想化ソフトウェアです。Windows上とLinux上で動作させることができます。(Mac用としてはVMware Fusion)があります</p>
+        <p>個人的な用途での利用は無料ですが商用で使用するには有料版のWorkstation Proを購入する必要が有ります。</p>
+        <p>VirtuakBoxより安定して動作する印象があります。</p>
+
+        <h4>Docker</h4>
+        <p>上の2つとは少し違うものです。DockerはLinux上でしか利用が出来ません。</p>
+        <p>Dockerは「コンテナ型」と呼ばれるもので、ホストOSのLinuxカーネルを共有することで上記2つのホスト型より高速に動作させることができます。</p>
+        <p>また、管理や環境の構築もDockerfileでかんたんに行えるのも特徴の1つです。</p>
+
+        <h4>Qemu</h4>
+        <p>これもまた上の3つとは違うものです。QemuはWindowsとLinux上で利用できます。</p>
+        <p>Qemuはアーキテクチャをエミュレートするので。x86_64上でARMやPPCなどを実行できるのが特徴です。</p>
+        <p>ただし、動作はホスト型よりも遅くなってしまいます。Linuxでは<code>virt-manager</code>を使用してGUIで管理できます。</p>
+
+        <h3>ディストリ開発に必要なのはどれなのか</h3>
+        <p>通常はVirtualBoxとVmwareを使えばいいと思います。Alter Linuxもこの2つで検証を行っています。</p>
+        <p>Ubuntu系では仮想マシンのp設定が重要になってくるので別途解説します。</p>
+        <p>それ以外のディストリではビルドしたisoを検証することにしか使用しないのでそこまで重要ではありません。</p>
+
+        <h2>VMware Workstation Playerのインストールと使い方</h2>
+        <p>現在工事中👷</p>
+
+        <h2>VirtualBoxのインストールと使い方</h2>
+        <p>現在工事中👷</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/release/index.php b/buildmydist-2/pages/release/index.php
new file mode 100644 (file)
index 0000000..3553a06
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "リリース";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "release";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>作成したものを配布する</h2>
+        <p>せっかくつくったんだからネットに公開したい人も多いと思います。</p>
+        <p>そのための手順や利用できるサービス、手順などをまとめます。</p>
+        <p>様々な注意点もあるので参考にしてください。</p>
+
+        <h2>ホームページを作る</h2>
+        <p>何かしらの自分の成果物をまとめるサイトが必要です。</p>
+        <p>既に自分のブログなどがある人はそれを利用してもいいですが持ってない人が多いと思います。</p>
+
+        <h3>GitHub Pages</h3>
+        <p>GitHubでホームページのホスティングを行えるサービス。基本無料。</p>
+        <p>PHPなどのサーバサイド言語は使えない他、ソースコードの公開が必須だったりするが容量は無制限です。</p>
+
+        <h3>Wix.com ホームページ作成</h3>
+        <p>コードを書くことなくデザインの良いホームページを簡単に作れるサービス。</p>
+        <p>有償版のほうが様々なカスタマイズを行えるが無償版でもそれなりに使えます。</p>
+
+        <h3>Xfree</h3>
+        <p>X-Serverが提供する無料サーバ。定期的な更新が必要だがこれだけの機能を無償で使えるのははっきり言ってすごい。</p>
+        <p>WordPressサーバやPHPサーバ、HTMLサーバの3種類から選択できる。</p>
+
+        <h3>各種レンタルサーバ</h3>
+        <p>有償だが確実なサポートを受けられる。WordPressを使うか自分でコードを書くかのどちらかが主流です。(ほかって有るのかな)</p>
+        <p>ハヤオはレンタルサーバでWordPressを使うのが一番いいと思ってます(専門知識あまりいらないしいろいろできる)</p>
+
+        <h2>青果物をアップロードする</h2>
+        <p>ビルドされたisoファイルなどは1GB以上あって置き場に困ると思います。</p>
+        <p>なるべく安くファイルを配布できる方法をまとめておきます。</p>
+
+        <h3>SourceForceやOSDN</h3>
+        <p>この2つは無料で無制限のストレージを使えます。条件はオープンソースであることです。</p>
+        <p>Alter LinuxはOSDnを利用して配布を主に行っています。</p>
+
+        <h3>Google Drive、OneDrive、MEGA</h3>
+        <p>既にこういったクラウドサービスの有償版を契約していて容量に余裕がある場合はこういった選択肢も有りだと思います。</p>
+        <p>しかし、無償版での契約しかない人はすぐに容量を使い切ってしまうのでおすすめできません。</p>
+
+        <h3>自宅にサーバを構築する</h3>
+        <p>ファイルサーバを構築してそこで配布する方法です。</p>
+        <p>自分でサーバを構築、メンテナンスをしないといけない上に障害耐性も低いのでおすすめできません。</p>
+        <p>(複数人開発での内部でのみ使用するのなら最適だと思います。)</p>
+
+        <h2>アップデートをする</h2>
+        <p>パッケージは次々に更新されていきます。</p>
+        <p>また改善点やバグが見つかることも多いでしょう。</p>
+        <p>定期的にイメージファイルなど配布物を更新していくことが大切です。</p>
+        <p>また、GitHubのIssueやDiscordなどを利用してユーザーとの会話をする場所を設けると良いでしょう。</p>
+
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/template/index.php b/buildmydist-2/pages/template/index.php
new file mode 100644 (file)
index 0000000..bfc59a4
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "OS名 - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "osname";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>ほげほげ</h2>
+        <p>ふごふご!ほげぇ!?ふご!ふごふご!!コケェッ!!!</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/template/relation.php b/buildmydist-2/pages/template/relation.php
new file mode 100644 (file)
index 0000000..5d62300
--- /dev/null
@@ -0,0 +1 @@
+<a href="http://localhost/buildmydist-2/">トップに戻る</a>
\ No newline at end of file
diff --git a/buildmydist-2/pages/ubuntu1804/index.php b/buildmydist-2/pages/ubuntu1804/index.php
new file mode 100644 (file)
index 0000000..96fd429
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Ubuntu 18.04 - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "ubuntu1804";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>警告</h2>
+        <p>ここで説明している内容はUbuntu 18.04LTSでしか使用できません。</p>
+        <p>Ubunbtu 20.04以降の場合はPython2系が使用できないのでBodhi Builderが使用できないので注意してください。</p>
+
+        <h2>主な作り方</h2>
+        <p>Ubuntu 18.04をカスタマイズする場合は既に構築されたUbuntu環境をもとにイメージファイルを構築します。</p>
+        <p>そのためAlter Linuxのようにソースコードでの管理ができません。</p>
+        <p>本格的な開発ではなく、あくまでも簡易的なものとして使うのが良いでしょう。</p>
+
+        <h2>開発を始める</h2>
+        <p>まずは準備編で必要なファイルや環境の構築を行いましょう。</p>
+        <p><a href="./preparation/">準備編</a>に進む</p>
+
+
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/pages/ubuntu1804/preparation/index.php b/buildmydist-2/pages/ubuntu1804/preparation/index.php
new file mode 100644 (file)
index 0000000..8d3820a
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+<?php
+        // ページ設定
+        $title = "Ubuntu 18.04 - 準備編";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "ubuntu1804";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>ベースとなるOSを選ぶ</h2>
+        <p>今回はBasix OSというミニマムなUbuntu系ディストリビューションをベースに開発を行います。</p>
+        <p>同じUbuntu 18.04系ならZorin OSや本家のUbuntuなどの他のOSを使用しても技術的な問題はありません。</p>
+        <p>ただし、不要なファイルやパッケージを自分で選びながらたくさん削除、追加を行わなければいけないので手間になります。</p>
+        <p>Basix OSはそもそもディストリビューションを自分で開発することを前提としているので比較的容易に開発をすることができます。</p>
+
+        <h2>Basi OSとは</h2>
+        <p>日本のLinux界隈で有名な<a href="http://simosnet.com/livecdroom/">ライブCDの部屋</a>の管理人さんが作成、公開しているOSです。</p>
+        <p>イメージファイルは<a href="http://simosnet.com/livecd/basix/">こちら</a>からダウンロードできます。</p>
+        <p>今回は<code>basix-4.0_x86_64.iso</code>を使用して作成していきます。(Beta 7以前のSerene Linuxもこれで開発されています。)</p>
+        <p>このDLしたイメージファイルは削除せずにとっておいてください。</p>
+
+        <h2>開発環境の構築</h2>
+        <p>今回は開発環境にBasixをインストール、カスタマイズし、その上でまるごとイメージファイルにしていきます。</p>
+        <p>そのため開発の土台となるのは仮想環境です。</p>
+        <p><a href="/buildmydist-2/pages/misc/virtual/">仮想マシンについてはこちらを参照してください。</a></p>
+        
+        <h2>終わり</h2>
+        <p>Ubutnu 18.04で特別に必要なものはこれだけです。</p>
+        <p>それ以外に必要な物はすべて<a href="http://localhost/buildmydist-2/pages/common">はじめに</a>で紹介しているのでそちらを参照してください。</p>
+        <p>次はカスタマイズ編です。</p>
+
+        
+        
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/buildmydist-2/pages/ubuntu2004/index.php b/buildmydist-2/pages/ubuntu2004/index.php
new file mode 100644 (file)
index 0000000..e876fe9
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+
+    <?php
+        // ページ設定
+        $title = "Ubuntu 20.04 - トップ";
+        $commonhtml = "${_SERVER['DOCUMENT_ROOT']}/buildmydist-2/commonhtml";
+        $distro = "ubuntu2004";
+
+        // 共通ファイルを読み込み
+        $domain = $_SERVER['HTTP_HOST'];
+        include("${commonhtml}/head.php");
+    ?>
+
+</head>
+<body>
+    <?php include("${commonhtml}/beforemain.php"); ?>
+
+    <main>
+        <h2>Ubuntu 20.04 LTSについて</h2>
+        <p>Ubuntu 20.04ではPython 2が公式パッケージから削除されたことによって、以前の方法が使えなくなりました。</p>
+    </main>
+
+    <?php include("${commonhtml}/aftermain.php"); ?>
+</body>
+</html>
diff --git a/buildmydist-2/prism/prism.css b/buildmydist-2/prism/prism.css
new file mode 100644 (file)
index 0000000..7444419
--- /dev/null
@@ -0,0 +1,554 @@
+/* PrismJS 1.24.1
+https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+bash+batch+c+csharp+cpp+cmake+cobol+css-extras+csv+diff+docker+icon+ini+javadoclike+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+lisp+livescript+log+lua+makefile+markdown+markup-templating+nginx+nim+nix+perl+php+powershell+qml+ruby+rust+shell-session+sql+swift+toml+typescript+uri+vala+wiki+xml-doc+yaml&plugins=line-highlight+line-numbers+file-highlight+show-language+inline-color+command-line+data-uri-highlight+toolbar+copy-to-clipboard+diff-highlight+treeview */
+/**
+ * okaidia theme for JavaScript, CSS and HTML
+ * Loosely based on Monokai textmate theme by http://www.monokai.nl/
+ * @author ocodia
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+       color: #f8f8f2;
+       background: none;
+       text-shadow: 0 1px rgba(0, 0, 0, 0.3);
+       font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+       font-size: 1em;
+       text-align: left;
+       white-space: pre;
+       word-spacing: normal;
+       word-break: normal;
+       word-wrap: normal;
+       line-height: 1.5;
+
+       -moz-tab-size: 4;
+       -o-tab-size: 4;
+       tab-size: 4;
+
+       -webkit-hyphens: none;
+       -moz-hyphens: none;
+       -ms-hyphens: none;
+       hyphens: none;
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+       padding: 1em;
+       margin: .5em 0;
+       overflow: auto;
+       border-radius: 0.3em;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+       background: #272822;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+       padding: .1em;
+       border-radius: .3em;
+       white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+       color: #8292a2;
+}
+
+.token.punctuation {
+       color: #f8f8f2;
+}
+
+.token.namespace {
+       opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.constant,
+.token.symbol,
+.token.deleted {
+       color: #f92672;
+}
+
+.token.boolean,
+.token.number {
+       color: #ae81ff;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+       color: #a6e22e;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string,
+.token.variable {
+       color: #f8f8f2;
+}
+
+.token.atrule,
+.token.attr-value,
+.token.function,
+.token.class-name {
+       color: #e6db74;
+}
+
+.token.keyword {
+       color: #66d9ef;
+}
+
+.token.regex,
+.token.important {
+       color: #fd971f;
+}
+
+.token.important,
+.token.bold {
+       font-weight: bold;
+}
+.token.italic {
+       font-style: italic;
+}
+
+.token.entity {
+       cursor: help;
+}
+
+pre[data-line] {
+       position: relative;
+       padding: 1em 0 1em 3em;
+}
+
+.line-highlight {
+       position: absolute;
+       left: 0;
+       right: 0;
+       padding: inherit 0;
+       margin-top: 1em; /* Same as .prism’s padding-top */
+
+       background: hsla(24, 20%, 50%,.08);
+       background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
+
+       pointer-events: none;
+
+       line-height: inherit;
+       white-space: pre;
+}
+
+@media print {
+       .line-highlight {
+               /*
+                * This will prevent browsers from replacing the background color with white.
+                * It's necessary because the element is layered on top of the displayed code.
+                */
+               -webkit-print-color-adjust: exact;
+               color-adjust: exact;
+       }
+}
+
+       .line-highlight:before,
+       .line-highlight[data-end]:after {
+               content: attr(data-start);
+               position: absolute;
+               top: .4em;
+               left: .6em;
+               min-width: 1em;
+               padding: 0 .5em;
+               background-color: hsla(24, 20%, 50%,.4);
+               color: hsl(24, 20%, 95%);
+               font: bold 65%/1.5 sans-serif;
+               text-align: center;
+               vertical-align: .3em;
+               border-radius: 999px;
+               text-shadow: none;
+               box-shadow: 0 1px white;
+       }
+
+       .line-highlight[data-end]:after {
+               content: attr(data-end);
+               top: auto;
+               bottom: .4em;
+       }
+
+.line-numbers .line-highlight:before,
+.line-numbers .line-highlight:after {
+       content: none;
+}
+
+pre[id].linkable-line-numbers span.line-numbers-rows {
+       pointer-events: all;
+}
+pre[id].linkable-line-numbers span.line-numbers-rows > span:before {
+       cursor: pointer;
+}
+pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {
+       background-color: rgba(128, 128, 128, .2);
+}
+
+pre[class*="language-"].line-numbers {
+       position: relative;
+       padding-left: 3.8em;
+       counter-reset: linenumber;
+}
+
+pre[class*="language-"].line-numbers > code {
+       position: relative;
+       white-space: inherit;
+}
+
+.line-numbers .line-numbers-rows {
+       position: absolute;
+       pointer-events: none;
+       top: 0;
+       font-size: 100%;
+       left: -3.8em;
+       width: 3em; /* works for line-numbers below 1000 lines */
+       letter-spacing: -1px;
+       border-right: 1px solid #999;
+
+       -webkit-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+
+}
+
+       .line-numbers-rows > span {
+               display: block;
+               counter-increment: linenumber;
+       }
+
+               .line-numbers-rows > span:before {
+                       content: counter(linenumber);
+                       color: #999;
+                       display: block;
+                       padding-right: 0.8em;
+                       text-align: right;
+               }
+
+div.code-toolbar {
+       position: relative;
+}
+
+div.code-toolbar > .toolbar {
+       position: absolute;
+       top: .3em;
+       right: .2em;
+       transition: opacity 0.3s ease-in-out;
+       opacity: 0;
+}
+
+div.code-toolbar:hover > .toolbar {
+       opacity: 1;
+}
+
+/* Separate line b/c rules are thrown out if selector is invalid.
+   IE11 and old Edge versions don't support :focus-within. */
+div.code-toolbar:focus-within > .toolbar {
+       opacity: 1;
+}
+
+div.code-toolbar > .toolbar > .toolbar-item {
+       display: inline-block;
+}
+
+div.code-toolbar > .toolbar > .toolbar-item > a {
+       cursor: pointer;
+}
+
+div.code-toolbar > .toolbar > .toolbar-item > button {
+       background: none;
+       border: 0;
+       color: inherit;
+       font: inherit;
+       line-height: normal;
+       overflow: visible;
+       padding: 0;
+       -webkit-user-select: none; /* for button */
+       -moz-user-select: none;
+       -ms-user-select: none;
+}
+
+div.code-toolbar > .toolbar > .toolbar-item > a,
+div.code-toolbar > .toolbar > .toolbar-item > button,
+div.code-toolbar > .toolbar > .toolbar-item > span {
+       color: #bbb;
+       font-size: .8em;
+       padding: 0 .5em;
+       background: #f5f2f0;
+       background: rgba(224, 224, 224, 0.2);
+       box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
+       border-radius: .5em;
+}
+
+div.code-toolbar > .toolbar > .toolbar-item > a:hover,
+div.code-toolbar > .toolbar > .toolbar-item > a:focus,
+div.code-toolbar > .toolbar > .toolbar-item > button:hover,
+div.code-toolbar > .toolbar > .toolbar-item > button:focus,
+div.code-toolbar > .toolbar > .toolbar-item > span:hover,
+div.code-toolbar > .toolbar > .toolbar-item > span:focus {
+       color: inherit;
+       text-decoration: none;
+}
+
+span.inline-color-wrapper {
+       /*
+        * The background image is the following SVG inline in base 64:
+        *
+        * <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2">
+        *     <path fill="gray" d="M0 0h2v2H0z"/>
+        *     <path fill="white" d="M0 0h1v1H0zM1 1h1v1H1z"/>
+        * </svg>
+        *
+        * SVG-inlining explained:
+        * https://stackoverflow.com/a/21626701/7595472
+        */
+       background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4=");
+       /* This is to prevent visual glitches where one pixel from the repeating pattern could be seen. */
+       background-position: center;
+       background-size: 110%;
+
+       display: inline-block;
+       height: 1.333ch;
+       width: 1.333ch;
+       margin: 0 .333ch;
+       box-sizing: border-box;
+       border: 1px solid white;
+       outline: 1px solid rgba(0,0,0,.5);
+       overflow: hidden;
+}
+
+span.inline-color {
+       display: block;
+       /* To prevent visual glitches again */
+       height: 120%;
+       width: 120%;
+}
+
+.command-line-prompt {
+       border-right: 1px solid #999;
+       display: block;
+       float: left;
+       font-size: 100%;
+       letter-spacing: -1px;
+       margin-right: 1em;
+       pointer-events: none;
+
+       -webkit-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+.command-line-prompt > span:before {
+       color: #999;
+       content: ' ';
+       display: block;
+       padding-right: 0.8em;
+}
+
+.command-line-prompt > span[data-user]:before {
+       content: "[" attr(data-user) "@" attr(data-host) "] $";
+}
+
+.command-line-prompt > span[data-user="root"]:before {
+       content: "[" attr(data-user) "@" attr(data-host) "] #";
+}
+
+.command-line-prompt > span[data-prompt]:before {
+       content: attr(data-prompt);
+}
+
+pre.diff-highlight > code .token.deleted:not(.prefix),
+pre > code.diff-highlight .token.deleted:not(.prefix) {
+       background-color: rgba(255, 0, 0, .1);
+       color: inherit;
+       display: block;
+}
+
+pre.diff-highlight > code .token.inserted:not(.prefix),
+pre > code.diff-highlight .token.inserted:not(.prefix) {
+       background-color: rgba(0, 255, 128, .1);
+       color: inherit;
+       display: block;
+}
+
+.token.treeview-part .entry-line {
+       position: relative;
+       text-indent: -99em;
+       display: inline-block;
+       vertical-align: top;
+       width: 1.2em;
+}
+.token.treeview-part .entry-line:before,
+.token.treeview-part .line-h:after {
+       content: "";
+       position: absolute;
+       top: 0;
+       left: 50%;
+       width: 50%;
+       height: 100%;
+}
+.token.treeview-part .line-h:before,
+.token.treeview-part .line-v:before {
+       border-left: 1px solid #ccc;
+}
+.token.treeview-part .line-v-last:before {
+       height: 50%;
+       border-left: 1px solid #ccc;
+       border-bottom: 1px solid #ccc;
+}
+.token.treeview-part .line-h:after {
+       height: 50%;
+       border-bottom: 1px solid #ccc;
+}
+.token.treeview-part .entry-name {
+       position: relative;
+       display: inline-block;
+       vertical-align: top;
+}
+.token.treeview-part .entry-name.dotfile {
+       opacity: 0.5;
+}
+
+/* @GENERATED-FONT */
+@font-face {
+       font-family: "PrismTreeview";
+       /**
+        * This font is generated from the .svg files in the `icons` folder. See the `treeviewIconFont` function in
+        * `gulpfile.js/index.js` for more information.
+        *
+        * Use the following escape sequences to refer to a specific icon:
+        *
+        * - \ea01 file
+        * - \ea02 folder
+        * - \ea03 image
+        * - \ea04 audio
+        * - \ea05 video
+        * - \ea06 text
+        * - \ea07 code
+        * - \ea08 archive
+        * - \ea09 pdf
+        * - \ea0a excel
+        * - \ea0b powerpoint
+        * - \ea0c word
+        */
+       src: url("data:application/font-woff;base64,d09GRgABAAAAAAgYAAsAAAAAEGAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPwAAAFY1UkH9Y21hcAAAAYQAAAB/AAACCtvO7yxnbHlmAAACBAAAA+MAAAlACm1VqmhlYWQAAAXoAAAAKgAAADZfxj5jaGhlYQAABhQAAAAYAAAAJAFbAMFobXR4AAAGLAAAAA4AAAA0CGQAAGxvY2EAAAY8AAAAHAAAABwM9A9CbWF4cAAABlgAAAAfAAAAIAEgAHZuYW1lAAAGeAAAATcAAAJSfUrk+HBvc3QAAAewAAAAZgAAAIka0DSfeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGRYyjiBgZWBgaGQoRZISkLpUAYOBj0GBiYGVmYGrCAgzTWFweEV4ysehs1ArgDDFgZGIA3CDAB2tQjAAHic7ZHLEcMwCESfLCz/VEoKSEE5parURxMOC4c0Ec283WGFdABgBXrwCAzam4bOK9KWeefM3Hhmjyn3ed+hTRq1pS7Ra/HjYGPniHcXMy4G/zNTP7/KW5HTXArkvdBW3ArN19dCG/NRIN8K5HuB/CiQn4U26VeBfBbML9NEH78AeJyVVc1u20YQ3pn905JcSgr/YsuSDTEg3cR1bFEkYyS1HQcQ2jQF2hot6vYSoECKnnPLA/SWUy9NTr31Bfp+6azsNI0SGiolzu7ODnfn+2Z2lnHG3rxhr9nfLGKbLGesncAYYnUHpsVnMG/uwyzNdFIVd6HI6twp8+R3LpT4TSglLoTHwwJgG2/dFvKrl9yI507/p5CCq4LTxB/PlPjkFaMHnWB/0S9je7RTPS+utnGtom1T2q5pk/e3H0M1S18rsXAL7wgpxQuhAmteGGvNjmcfGXuwnFNOPCXxeOGmnjrBLWNyBeNtVq2Hs03yus1aPS3mzSyNVSfu588iW1Q93x/4fjcHn+5EkS2tMxr4xIRa8ese+4L9uKZnxEqs8+ldyN9atU02a5t5uQ8hZGms1QTKpaKYqnipiNNOAIeIADC0JNEOYY+jtSgFoOchiAjRGFACpUTRje8bwIYWGCDEgENY8MEu9bnCYCdAxftoNg0KiSpUtPaHcanYwzXRu6T4r40b5npal3V7UHWCPJW9niyl1vIHgoujEXZjudBkeWkOeMQBRmbEPhKzij1i52t6/TadL+3q7H0U1eq4E8cG4gIIwQLx8VX7ToPXgPrehVc5QXHR7gMSmwjKfaYAP4KvZV+yn9bE18y2IY37LvtyrSg3i7ZK++B603ndlg/gBJpZRsfpBI6hyiaQ6FjlnThz8lAC3LgBIMnXDOAXxBQ4SIgiEhx2AcGCAwAhwjXRpCQms42bwAUt75BvAwgONzdgOfWEwzk4Ylzj4mz+5YEzzXzWX9aNlk7ot65y5QnBHsNlm6zDTu7sspRqG4V+fgJ1lVBZ07Nm7s5nemo3Lf3PO7iwtnroQ5/YDGwPRUip6fV6L+27p+wCHwSvPs85UnHqId8NAn5IBsKdv95KrL9m31Gsf2a/rluDslk1y1J9GE+LUmmVT/OyOHaFKGnapt2H5XeJTmKd6qYNoVVZOy+pWzr7rMip3ndG/4mQSoUcMbAqG/YNIAdXhkAqTVruXhocSKN0iS4Rwj7vSS4fcF/La07BfeQSuRAcFeW+9igjwPhhYPpGCBCBHhxiKMyFMFT7ziRH7RtfIWdiha+TdW+Rqs7bLHdN2ZJIKl0um0x3op9saYr0REeRdj09pl43pMzz4tjztrY8L4o8bzT+oLY27PR/eFtXs/YY5vtwB5Iqad14eYN0ujveMaGWqkdU3TKbQSC5Uvxaf4fA7SAQ3r2tEfIhd4duld91bwMisjqBw22orthNcroXl7KqO1329HBgAexgoCfGAwiDPoBnriki3lmNojrzvD0tjo6E3vPYP6E2BMIAeJxjYGRgYADiY8t3FsTz23xl4GbYzIAB/v9nWM6wBcjgYGAC8QH+QQhZAAB4nGNgZGBg2MzAACeXMzAyoAJeADPyAh14nGNgAILNpGEA0fgIZQAAAAAAAAA2AHIAvgE+AZgCCAKMAv4DlgPsBEYEoHicY2BkYGDgZchi4GQAASYg5gJCBob/YD4DABTSAZcAeJx9kU1uwjAQhV/4qwpqhdSqi67cTTeVEmBXDgBbhBD7AHYISuLUMSD2PUdP0HNwjp6i676k3qQS9Ujjb968mYUNoI8zPJTHw02Vy9PAFatfbpLuHbfIT47b6MF33KH+6riLF0wc93CHN27wWtdUHvHuuIFbfDhuUv903CKfHbfxgC/HHerfjrtYen3HPTx7ambiIl0YKQ+xPM5ltE9CU9NqxVKaItaZGPqDmj6VmTShlRuxOoniEI2sVUIZnYqJzqxMEi1yo3dybf2ttfk4CJTT/bVOMYNBjAIpFiTJOLCWOGLOHGGPBCE7l32XO0tmw04MjQwCQ7774B//lDmrZkJY3hvOrHBiLuiJMKJqoVgrejQ3CP5Yubt0JwxNJa96Oypr6j621VSOMQKG+uP36eKmHylcb0MAeJxtwdEOgjAMBdBeWEFR/Mdl7bTJtMsygc/nwVfPoYF+QP+tGDAigDFhxgVXLLjhjhUPCtmKTtmLaGN7x6dy/Io5bybqoevRQ3LRObb0sk3HKpn1SFqW6ru26vbpYfcmRCccJhqsAAA=")
+               format("woff");
+}
+
+.token.treeview-part .entry-name:before {
+       content: "\ea01";
+       font-family: "PrismTreeview";
+       font-size: inherit;
+       font-style: normal;
+       -webkit-font-smoothing: antialiased;
+       -moz-osx-font-smoothing: grayscale;
+       width: 2.5ex;
+       display: inline-block;
+}
+
+.token.treeview-part .entry-name.dir:before {
+       content: "\ea02";
+}
+.token.treeview-part .entry-name.ext-bmp:before,
+.token.treeview-part .entry-name.ext-eps:before,
+.token.treeview-part .entry-name.ext-gif:before,
+.token.treeview-part .entry-name.ext-jpe:before,
+.token.treeview-part .entry-name.ext-jpg:before,
+.token.treeview-part .entry-name.ext-jpeg:before,
+.token.treeview-part .entry-name.ext-png:before,
+.token.treeview-part .entry-name.ext-svg:before,
+.token.treeview-part .entry-name.ext-tiff:before {
+       content: "\ea03";
+}
+.token.treeview-part .entry-name.ext-cfg:before,
+.token.treeview-part .entry-name.ext-conf:before,
+.token.treeview-part .entry-name.ext-config:before,
+.token.treeview-part .entry-name.ext-csv:before,
+.token.treeview-part .entry-name.ext-ini:before,
+.token.treeview-part .entry-name.ext-log:before,
+.token.treeview-part .entry-name.ext-md:before,
+.token.treeview-part .entry-name.ext-nfo:before,
+.token.treeview-part .entry-name.ext-txt:before {
+       content: "\ea06";
+}
+.token.treeview-part .entry-name.ext-asp:before,
+.token.treeview-part .entry-name.ext-aspx:before,
+.token.treeview-part .entry-name.ext-c:before,
+.token.treeview-part .entry-name.ext-cc:before,
+.token.treeview-part .entry-name.ext-cpp:before,
+.token.treeview-part .entry-name.ext-cs:before,
+.token.treeview-part .entry-name.ext-css:before,
+.token.treeview-part .entry-name.ext-h:before,
+.token.treeview-part .entry-name.ext-hh:before,
+.token.treeview-part .entry-name.ext-htm:before,
+.token.treeview-part .entry-name.ext-html:before,
+.token.treeview-part .entry-name.ext-jav:before,
+.token.treeview-part .entry-name.ext-java:before,
+.token.treeview-part .entry-name.ext-js:before,
+.token.treeview-part .entry-name.ext-php:before,
+.token.treeview-part .entry-name.ext-rb:before,
+.token.treeview-part .entry-name.ext-xml:before {
+       content: "\ea07";
+}
+.token.treeview-part .entry-name.ext-7z:before,
+.token.treeview-part .entry-name.ext-bz:before,
+.token.treeview-part .entry-name.ext-bz2:before,
+.token.treeview-part .entry-name.ext-gz:before,
+.token.treeview-part .entry-name.ext-rar:before,
+.token.treeview-part .entry-name.ext-tar:before,
+.token.treeview-part .entry-name.ext-tgz:before,
+.token.treeview-part .entry-name.ext-zip:before {
+       content: "\ea08";
+}
+.token.treeview-part .entry-name.ext-aac:before,
+.token.treeview-part .entry-name.ext-au:before,
+.token.treeview-part .entry-name.ext-cda:before,
+.token.treeview-part .entry-name.ext-flac:before,
+.token.treeview-part .entry-name.ext-mp3:before,
+.token.treeview-part .entry-name.ext-oga:before,
+.token.treeview-part .entry-name.ext-ogg:before,
+.token.treeview-part .entry-name.ext-wav:before,
+.token.treeview-part .entry-name.ext-wma:before {
+       content: "\ea04";
+}
+.token.treeview-part .entry-name.ext-avi:before,
+.token.treeview-part .entry-name.ext-flv:before,
+.token.treeview-part .entry-name.ext-mkv:before,
+.token.treeview-part .entry-name.ext-mov:before,
+.token.treeview-part .entry-name.ext-mp4:before,
+.token.treeview-part .entry-name.ext-mpeg:before,
+.token.treeview-part .entry-name.ext-mpg:before,
+.token.treeview-part .entry-name.ext-ogv:before,
+.token.treeview-part .entry-name.ext-webm:before {
+       content: "\ea05";
+}
+.token.treeview-part .entry-name.ext-pdf:before {
+       content: "\ea09";
+}
+.token.treeview-part .entry-name.ext-xls:before,
+.token.treeview-part .entry-name.ext-xlsx:before {
+       content: "\ea0a";
+}
+.token.treeview-part .entry-name.ext-doc:before,
+.token.treeview-part .entry-name.ext-docm:before,
+.token.treeview-part .entry-name.ext-docx:before {
+       content: "\ea0c";
+}
+.token.treeview-part .entry-name.ext-pps:before,
+.token.treeview-part .entry-name.ext-ppt:before,
+.token.treeview-part .entry-name.ext-pptx:before {
+       content: "\ea0b";
+}
+
diff --git a/buildmydist-2/prism/prism.js b/buildmydist-2/prism/prism.js
new file mode 100644 (file)
index 0000000..0de300a
--- /dev/null
@@ -0,0 +1,66 @@
+/* PrismJS 1.24.1
+https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+bash+batch+c+csharp+cpp+cmake+cobol+css-extras+csv+diff+docker+icon+ini+javadoclike+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+lisp+livescript+log+lua+makefile+markdown+markup-templating+nginx+nim+nix+perl+php+powershell+qml+ruby+rust+shell-session+sql+swift+toml+typescript+uri+vala+wiki+xml-doc+yaml&plugins=line-highlight+line-numbers+file-highlight+show-language+inline-color+command-line+data-uri-highlight+toolbar+copy-to-clipboard+diff-highlight+treeview */
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function t(e,r){var a,n;switch(r=r||{},M.util.type(e)){case"Object":if(n=M.util.objId(e),r[n])return r[n];for(var i in a={},r[n]=a,e)e.hasOwnProperty(i)&&(a[i]=t(e[i],r));return a;case"Array":return n=M.util.objId(e),r[n]?r[n]:(a=[],r[n]=a,e.forEach(function(e,n){a[n]=t(e,r)}),a);default:return e}},getLanguage:function(e){for(;e&&!c.test(e.className);)e=e.parentElement;return e?(e.className.match(c)||[,"none"])[1].toLowerCase():"none"},currentScript:function(){if("undefined"==typeof document)return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(e){var n=(/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(e.stack)||[])[1];if(n){var t=document.getElementsByTagName("script");for(var r in t)if(t[r].src==n)return t[r]}return null}},isActive:function(e,n,t){for(var r="no-"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{plain:e,plaintext:e,text:e,txt:e,extend:function(e,n){var t=M.util.clone(M.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(t,e,n,r){var a=(r=r||M.languages)[t],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==e)for(var o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);n.hasOwnProperty(l)||(i[l]=a[l])}var s=r[t];return r[t]=i,M.languages.DFS(M.languages,function(e,n){n===s&&e!=t&&(this[e]=i)}),i},DFS:function e(n,t,r,a){a=a||{};var i=M.util.objId;for(var l in n)if(n.hasOwnProperty(l)){t.call(n,l,n[l],r||l);var o=n[l],s=M.util.type(o);"Object"!==s||a[i(o)]?"Array"!==s||a[i(o)]||(a[i(o)]=!0,e(o,t,l,a)):(a[i(o)]=!0,e(o,t,null,a))}}},plugins:{},highlightAll:function(e,n){M.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};M.hooks.run("before-highlightall",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),M.hooks.run("before-all-elements-highlight",r);for(var a,i=0;a=r.elements[i++];)M.highlightElement(a,!0===n,r.callback)},highlightElement:function(e,n,t){var r=M.util.getLanguage(e),a=M.languages[r];e.className=e.className.replace(c,"").replace(/\s+/g," ")+" language-"+r;var i=e.parentElement;i&&"pre"===i.nodeName.toLowerCase()&&(i.className=i.className.replace(c,"").replace(/\s+/g," ")+" language-"+r);var l={element:e,language:r,grammar:a,code:e.textContent};function o(e){l.highlightedCode=e,M.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,M.hooks.run("after-highlight",l),M.hooks.run("complete",l),t&&t.call(l.element)}if(M.hooks.run("before-sanity-check",l),(i=l.element.parentElement)&&"pre"===i.nodeName.toLowerCase()&&!i.hasAttribute("tabindex")&&i.setAttribute("tabindex","0"),!l.code)return M.hooks.run("complete",l),void(t&&t.call(l.element));if(M.hooks.run("before-highlight",l),l.grammar)if(n&&u.Worker){var s=new Worker(M.filename);s.onmessage=function(e){o(e.data)},s.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else o(M.highlight(l.code,l.grammar,l.language));else o(M.util.encode(l.code))},highlight:function(e,n,t){var r={code:e,grammar:n,language:t};return M.hooks.run("before-tokenize",r),r.tokens=M.tokenize(r.code,r.grammar),M.hooks.run("after-tokenize",r),W.stringify(M.util.encode(r.tokens),r.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var r in t)n[r]=t[r];delete n.rest}var a=new i;return I(a,a.head,e),function e(n,t,r,a,i,l){for(var o in r)if(r.hasOwnProperty(o)&&r[o]){var s=r[o];s=Array.isArray(s)?s:[s];for(var u=0;u<s.length;++u){if(l&&l.cause==o+","+u)return;var c=s[u],g=c.inside,f=!!c.lookbehind,h=!!c.greedy,d=c.alias;if(h&&!c.pattern.global){var p=c.pattern.toString().match(/[imsuy]*$/)[0];c.pattern=RegExp(c.pattern.source,p+"g")}for(var v=c.pattern||c,m=a.next,y=i;m!==t.tail&&!(l&&y>=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(P<A||"string"==typeof E.value);E=E.next)x++,P+=E.value.length;x--,b=n.slice(y,P),k.index-=y}else if(!(k=z(v,0,b,f)))continue;var w=k.index,S=k[0],O=b.slice(0,w),L=b.slice(w+S.length),N=y+b.length;l&&N>l.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1<x){var _={cause:o+","+u,reach:N};e(n,t,r,m.prev,y,_),l&&_.reach>l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;(n.next=r).prev=n,e.length-=a}if(u.Prism=M,W.stringify=function n(e,t){if("string"==typeof e)return e;if(Array.isArray(e)){var r="";return e.forEach(function(e){r+=n(e,t)}),r}var a={type:e.type,content:n(e.content,t),tag:"span",classes:["token",e.type],attributes:{},language:t},i=e.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),M.hooks.run("wrap",a);var l="";for(var o in a.attributes)l+=" "+o+'="'+(a.attributes[o]||"").replace(/"/g,"&quot;")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
+Prism.languages.markup={comment:/<!--[\s\S]*?-->/,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata:/<!\[CDATA\[[\s\S]*?\]\]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^<!\[CDATA\[|\]\]>$/i;var t={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[^])*?(?=</__>)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
+!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism);
+Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
+Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;
+!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o<s.length;o++)i[s[o]]=e.languages.bash[s[o]];e.languages.shell=e.languages.bash}(Prism);
+!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;Prism.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/^for\b|\b(?:in|do)\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|neq|lss|leq|gtr|geq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/^if\b|\b(?:not|cmdextversion|defined|errorlevel|exist)\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|neq|lss|leq|gtr|geq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^\w+\b/i,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}();
+Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean;
+!function(s){function a(e,s){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+s[+n]+")"})}function t(e,n,s){return RegExp(a(e,n),s||"")}function e(e,n){for(var s=0;s<n;s++)e=e.replace(/<<self>>/g,function(){return"(?:"+e+")"});return e.replace(/<<self>>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(n+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(n+" "+r+" "+o),g=e("<(?:[^<>;=+\\-*/%&|^]|<<self>>)*>",2),b=e("\\((?:[^()]|<<self>>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=a("<<0>>(?:\\s*<<1>>)?",[h,g]),m=a("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=a("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=a("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[a("\\(<<0>>+(?:,<<0>>+)+\\)",[a("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k])]),m,k]),v={keyword:p,punctuation:/[<>()?,.:[\]]/},x="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",$='"(?:\\\\.|[^\\\\"\r\n])*"';s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[$]),lookbehind:!0,greedy:!0},{pattern:RegExp(x),greedy:!0,alias:"character"}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,w]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:v},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:v},{pattern:t("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:v},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[w,u,h]),inside:v}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|typeof|sizeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:v},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[w,m]),inside:v,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[w]),lookbehind:!0,inside:v,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:t("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:v}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,w,p.source,b,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:t("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,b]),lookbehind:!0,greedy:!0,inside:s.languages.csharp},keyword:p,"class-name":{pattern:RegExp(w),greedy:!0,inside:v},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var _=$+"|"+x,B=a("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[_]),E=e(a("[^\"'/()]|<<0>>|\\(<<self>>*\\)",[B]),2),R="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",P=a("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[R,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[R]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=":[^}\r\n]+",S=e(a("[^\"'/()]|<<0>>|\\(<<self>>*\\)",[B]),2),j=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[S,z]),A=e(a("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<<self>>*\\)",[_]),2),F=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[A,z]);function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[e]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[n,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[j]),lookbehind:!0,greedy:!0,inside:U(j,S)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[F]),lookbehind:!0,greedy:!0,inside:U(F,A)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp;
+!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(/<keyword>/g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+".replace(/<keyword>/g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:module|import)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>".replace(/<mod-name>/g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b[a-z_]\w*\s*<(?:[^<>]|<(?:[^<>])*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism);
+Prism.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?|(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:ON|OFF|TRUE|FALSE)\b/,namespace:/\b(?:PROPERTIES|SHARED|PRIVATE|STATIC|PUBLIC|INTERFACE|TARGET_OBJECTS)\b/,operator:/\b(?:NOT|AND|OR|MATCHES|LESS|GREATER|EQUAL|STRLESS|STRGREATER|STREQUAL|VERSION_LESS|VERSION_EQUAL|VERSION_GREATER|DEFINED)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/};
+Prism.languages.cobol={comment:{pattern:/\*>.*|(^[ \t]*)\*.*/m,lookbehind:!0,greedy:!0},string:{pattern:/[xzgn]?(?:"(?:[^\r\n"]|"")*"(?!")|'(?:[^\r\n']|'')*'(?!'))/i,greedy:!0},level:{pattern:/(^[ \t]*)\d+\b/m,lookbehind:!0,greedy:!0,alias:"number"},"class-name":{pattern:/(\bpic(?:ture)?\s+)(?:(?:[-\w$/,:*+<>]|\.(?!\s|$))(?:\(\d+\))?)+/i,lookbehind:!0,inside:{number:{pattern:/(\()\d+/,lookbehind:!0},punctuation:/[()]/}},keyword:{pattern:/(^|[^\w-])(?:ABORT|ACCEPT|ACCESS|ADD|ADDRESS|ADVANCING|AFTER|ALIGNED|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALSO|ALTER|ALTERNATE|ANY|ARE|AREA|AREAS|AS|ASCENDING|ASCII|ASSIGN|ASSOCIATED-DATA|ASSOCIATED-DATA-LENGTH|AT|ATTRIBUTE|AUTHOR|AUTO|AUTO-SKIP|BACKGROUND-COLOR|BACKGROUND-COLOUR|BASIS|BEEP|BEFORE|BEGINNING|BELL|BINARY|BIT|BLANK|BLINK|BLOCK|BOUNDS|BOTTOM|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CCSVERSION|CD|CF|CH|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CLASS|CLASS-ID|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|COBOL|CODE|CODE-SET|COLLATING|COL|COLUMN|COM-REG|COMMA|COMMITMENT|COMMON|COMMUNICATION|COMP|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONTROL-POINT|CONTROLS|CONVENTION|CONVERTING|COPY|CORR|CORRESPONDING|COUNT|CRUNCH|CURRENCY|CURSOR|DATA|DATA-BASE|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DBCS|DE|DEBUG-CONTENTS|DEBUG-ITEM|DEBUG-LINE|DEBUG-NAME|DEBUG-SUB-1|DEBUG-SUB-2|DEBUG-SUB-3|DEBUGGING|DECIMAL-POINT|DECLARATIVES|DEFAULT|DEFAULT-DISPLAY|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESTINATION|DETAIL|DFHRESP|DFHVALUE|DISABLE|DISK|DISPLAY|DISPLAY-1|DIVIDE|DIVISION|DONTCARE|DOUBLE|DOWN|DUPLICATES|DYNAMIC|EBCDIC|EGCS|EGI|ELSE|EMI|EMPTY-CHECK|ENABLE|END|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|ENDING|ENTER|ENTRY|ENTRY-PROCEDURE|ENVIRONMENT|EOP|ERASE|ERROR|EOL|EOS|ESCAPE|ESI|EVALUATE|EVENT|EVERY|EXCEPTION|EXCLUSIVE|EXHIBIT|EXIT|EXPORT|EXTEND|EXTENDED|EXTERNAL|FD|FILE|FILE-CONTROL|FILLER|FINAL|FIRST|FOOTING|FOR|FOREGROUND-COLOR|FOREGROUND-COLOUR|FROM|FULL|FUNCTION|FUNCTIONNAME|FUNCTION-POINTER|GENERATE|GOBACK|GIVING|GLOBAL|GO|GRID|GROUP|HEADING|HIGHLIGHT|HIGH-VALUE|HIGH-VALUES|I-O|I-O-CONTROL|ID|IDENTIFICATION|IF|IMPLICIT|IMPORT|IN|INDEX|INDEXED|INDICATE|INITIAL|INITIALIZE|INITIATE|INPUT|INPUT-OUTPUT|INSPECT|INSTALLATION|INTEGER|INTO|INVALID|INVOKE|IS|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANGUAGE|LAST|LB|LD|LEADING|LEFT|LEFTLINE|LENGTH|LENGTH-CHECK|LIBACCESS|LIBPARAMETER|LIBRARY|LIMIT|LIMITS|LINAGE|LINAGE-COUNTER|LINE|LINES|LINE-COUNTER|LINKAGE|LIST|LOCAL|LOCAL-STORAGE|LOCK|LONG-DATE|LONG-TIME|LOWER|LOWLIGHT|LOW-VALUE|LOW-VALUES|MEMORY|MERGE|MESSAGE|MMDDYYYY|MODE|MODULES|MORE-LABELS|MOVE|MULTIPLE|MULTIPLY|NAMED|NATIONAL|NATIONAL-EDITED|NATIVE|NEGATIVE|NETWORK|NEXT|NO|NO-ECHO|NULL|NULLS|NUMBER|NUMERIC|NUMERIC-DATE|NUMERIC-EDITED|NUMERIC-TIME|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OMITTED|ON|OPEN|OPTIONAL|ORDER|ORDERLY|ORGANIZATION|OTHER|OUTPUT|OVERFLOW|OVERLINE|OWN|PACKED-DECIMAL|PADDING|PAGE|PAGE-COUNTER|PASSWORD|PERFORM|PF|PH|PIC|PICTURE|PLUS|POINTER|POSITION|POSITIVE|PORT|PRINTER|PRINTING|PRIVATE|PROCEDURE|PROCEDURE-POINTER|PROCEDURES|PROCEED|PROCESS|PROGRAM|PROGRAM-ID|PROGRAM-LIBRARY|PROMPT|PURGE|QUEUE|QUOTE|QUOTES|RANDOM|READER|REMOTE|RD|REAL|READ|RECEIVE|RECEIVED|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REF|REFERENCE|REFERENCES|RELATIVE|RELEASE|REMAINDER|REMARKS|REMOVAL|REMOVE|RENAMES|REPLACE|REPLACING|REPORT|REPORTING|REPORTS|REQUIRED|RERUN|RESERVE|REVERSE-VIDEO|RESET|RETURN|RETURN-CODE|RETURNING|REVERSED|REWIND|REWRITE|RF|RH|RIGHT|ROUNDED|RUN|SAME|SAVE|SCREEN|SD|SEARCH|SECTION|SECURE|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEPARATE|SEQUENCE|SEQUENTIAL|SET|SHARED|SHAREDBYALL|SHAREDBYRUNUNIT|SHARING|SHIFT-IN|SHIFT-OUT|SHORT-DATE|SIGN|SIZE|SORT|SORT-CONTROL|SORT-CORE-SIZE|SORT-FILE-SIZE|SORT-MERGE|SORT-MESSAGE|SORT-MODE-SIZE|SORT-RETURN|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|STANDARD|STANDARD-1|STANDARD-2|START|STATUS|STOP|STRING|SUB-QUEUE-1|SUB-QUEUE-2|SUB-QUEUE-3|SUBTRACT|SUM|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|TABLE|TALLY|TALLYING|TASK|TAPE|TERMINAL|TERMINATE|TEST|TEXT|THEN|THREAD|THREAD-LOCAL|THROUGH|THRU|TIME|TIMER|TIMES|TITLE|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRAILING|TRUNCATED|TYPE|TYPEDEF|UNDERLINE|UNIT|UNSTRING|UNTIL|UP|UPON|USAGE|USE|USING|VALUE|VALUES|VARYING|VIRTUAL|WAIT|WHEN|WHEN-COMPILED|WITH|WORDS|WORKING-STORAGE|WRITE|YEAR|YYYYMMDD|YYYYDDD|ZERO-FILL|ZEROS|ZEROES)(?![\w-])/i,lookbehind:!0},boolean:{pattern:/(^|[^\w-])(?:false|true)(?![\w-])/i,lookbehind:!0},number:{pattern:/(^|[^\w-])(?:[+-]?(?:(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:e[+-]?\d+)?|zero))(?![\w-])/i,lookbehind:!0},operator:[/<>|[<>]=?|[=+*/&]/,{pattern:/(^|[^\w-])(?:-|and|equal|greater|less|not|or|than)(?![\w-])/i,lookbehind:!0}],punctuation:/[.:,()]/};
+!function(e){var a,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:a={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=a,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(Prism);
+Prism.languages.csv={value:/[^\r\n,"]+|"(?:[^"]|"")*"(?!")/,punctuation:/,/};
+!function(i){i.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),i.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(e)[0]}}}}),Object.defineProperty(i.languages.diff,"PREFIXES",{value:r})}(Prism);
+!function(e){var r="(?:[ \t]+(?![ \t])(?:<SP_BS>)?|<SP_BS>)".replace(/<SP_BS>/g,function(){return"\\\\[\r\n](?:\\s|\\\\[\r\n]|#.*(?!.))*(?![\\s#]|\\\\[\r\n])"}),n="\"(?:[^\"\\\\\r\n]|\\\\(?:\r\n|[^]))*\"|'(?:[^'\\\\\r\n]|\\\\(?:\r\n|[^]))*'",t="--[\\w-]+=(?:<STR>|(?![\"'])(?:[^\\s\\\\]|\\\\.)+)".replace(/<STR>/g,function(){return n}),o={pattern:RegExp(n),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function a(e,n){return e=e.replace(/<OPT>/g,function(){return t}).replace(/<SP>/g,function(){return r}),RegExp(e,n)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:a("(^(?:ONBUILD<SP>)?\\w+<SP>)<OPT>(?:<SP><OPT>)*","i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:a("(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\\b","i"),lookbehind:!0,greedy:!0},{pattern:a("(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \t\\\\]+<SP>)AS","i"),lookbehind:!0,greedy:!0},{pattern:a("(^ONBUILD<SP>)\\w+","i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism);
+Prism.languages.icon={comment:/#.*/,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n_]|\\.|_(?!\1)(?:\r\n|[\s\S]))*\1/,greedy:!0},number:/\b(?:\d+r[a-z\d]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b|\.\d+\b/i,"builtin-keyword":{pattern:/&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\b/,alias:"variable"},directive:{pattern:/\$\w+/,alias:"builtin"},keyword:/\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\b/,function:/\b(?!\d)\w+(?=\s*[({]|\s*!\s*\[)/,operator:/[+-]:(?!=)|(?:[\/?@^%&]|\+\+?|--?|==?=?|~==?=?|\*\*?|\|\|\|?|<(?:->?|<?=?)|>>?=?)(?::=)?|:(?:=:?)?|[!.\\|~]/,punctuation:/[\[\](){},;]/};
+Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},header:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/};
+!function(h){function v(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,o){if(a.language===r){var c=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var n,t=c.length;-1!==a.code.indexOf(n=v(r,t));)++t;return c[t]=e,n}),a.grammar=h.languages.markup}}},tokenizePlaceholders:{value:function(p,k){if(p.language===k&&p.tokenStack){p.grammar=h.languages[k];var m=0,d=Object.keys(p.tokenStack);!function e(n){for(var t=0;t<n.length&&!(m>=d.length);t++){var a=n[t];if("string"==typeof a||a.content&&"string"==typeof a.content){var r=d[m],o=p.tokenStack[r],c="string"==typeof a?a:a.content,i=v(k,r),u=c.indexOf(i);if(-1<u){++m;var g=c.substring(0,u),l=new h.Token(k,h.tokenize(o,p.grammar),"language-"+k,o),s=c.substring(u+i.length),f=[];g&&f.push.apply(f,e([g])),f.push(l),s&&f.push.apply(f,e([s])),"string"==typeof a?n.splice.apply(n,[t,1].concat(f)):a.content=f}}else a.content&&e(a.content)}return n}(p.tokens)}}}})}(Prism);
+!function(a){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;a.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/i,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:bool|boolean|int|integer|float|string|object|array)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:bool|int|float|string|object|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*[\w|]\|\s*)(?:null|false)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?[\w|]\|\s*)(?:null|false)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:null|false)\b/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:a.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];a.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),a.hooks.add("before-tokenize",function(e){if(/<\?/.test(e.code)){a.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/gi)}}),a.hooks.add("after-tokenize",function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism);
+!function(p){var a=p.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(a,"addSupport",{value:function(a,e){"string"==typeof a&&(a=[a]),a.forEach(function(a){!function(a,e){var n="doc-comment",t=p.languages[a];if(t){var r=t[n];if(!r){var o={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}};r=(t=p.languages.insertBefore(a,"comment",o))[n]}if(r instanceof RegExp&&(r=t[n]={pattern:r}),Array.isArray(r))for(var i=0,s=r.length;i<s;i++)r[i]instanceof RegExp&&(r[i]={pattern:r[i]}),e(r[i]);else e(r)}}(a,function(a){a.inside||(a.inside={}),a.inside.rest=e})})}}),a.addSupport(["java","javascript","php"],a)}(Prism);
+!function(e){var n="\\\\\\((?:[^()]|\\([^()]*\\))*\\)",t=RegExp('"(?:[^"\r\n\\\\]|\\\\[^\r\n(]|__)*"'.replace(/__/g,function(){return n})),i={interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\{2})*)"+n),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},a=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(t.source+"(?=\\s*:(?!:))"),greedy:!0,inside:i},string:{pattern:t,greedy:!0,inside:i},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:true|false)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|or|not)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};i.interpolation.inside.content.inside=a}(Prism);
+!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|as|declare|implements|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter;var s=e.languages.extend("typescript",{});delete s["class-name"],e.languages.typescript["class-name"].inside=s,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism);
+!function(e){var a=e.languages.javascript,n="\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})+\\}",t="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(t+"(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?=\\s|$)"),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(t+"\\[(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?:=[^[\\]]+)?\\](?=\\s|$)"),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:a,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@(?:augments|extends|class|interface|memberof!?|template|this|typedef)\\s+(?:<TYPE>\\s+)?)[A-Z]\\w*(?:\\.[A-Z]\\w*)*".replace(/<TYPE>/g,function(){return n})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:a.string,number:a.number,boolean:a.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:a,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(Prism);
+!function(a){function e(a,e){return RegExp(a.replace(/<ID>/g,function(){return"(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*"}),e)}a.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+a.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),a.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+a.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),a.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),a.languages.insertBefore("javascript","keyword",{imports:{pattern:e("(\\bimport\\b\\s*)(?:<ID>(?:\\s*,\\s*(?:\\*\\s*as\\s+<ID>|\\{[^{}]*\\}))?|\\*\\s*as\\s+<ID>|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e("(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+<ID>)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|for|finally|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),a.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),a.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:e("(\\.\\s*)#?<ID>"),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r<t.length;r++){var n=t[r],s=a.languages.javascript[n];"RegExp"===a.util.type(s)&&(s=a.languages.javascript[n]={pattern:s});var o=s.inside||{};(s.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(Prism);
+Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;
+!function(n){var e=/("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;n.languages.json5=n.languages.extend("json",{property:[{pattern:RegExp(e.source+"(?=\\s*:)"),greedy:!0},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/,alias:"unquoted"}],string:{pattern:e,greedy:!0},number:/[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+\b)?/})}(Prism);
+Prism.languages.jsonp=Prism.languages.extend("json",{punctuation:/[{}[\]();,.]/}),Prism.languages.insertBefore("jsonp","punctuation",{function:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*\()/});
+Prism.languages.jsstacktrace={"error-message":{pattern:/^\S.*/m,alias:"string"},"stack-frame":{pattern:/(^[ \t]+)at[ \t].*/m,lookbehind:!0,inside:{"not-my-code":{pattern:/^at[ \t]+(?!\s)(?:node\.js|<unknown>|.*(?:node_modules|\(<anonymous>\)|\(<unknown>|<anonymous>$|\(internal\/|\(node\.js)).*/m,alias:"comment"},filename:{pattern:/(\bat\s+(?!\s)|\()(?:[a-zA-Z]:)?[^():]+(?=:)/,lookbehind:!0,alias:"url"},function:{pattern:/(at\s+(?:new\s+)?)(?!\s)[_$a-zA-Z\xA0-\uFFFF<][.$\w\xA0-\uFFFF<>]*/,lookbehind:!0,inside:{punctuation:/\./}},punctuation:/[()]/,keyword:/\b(?:at|new)\b/,alias:{pattern:/\[(?:as\s+)?(?!\s)[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\]/,alias:"variable"},"line-number":{pattern:/:[0-9]+(?::[0-9]+)?\b/,alias:"number",inside:{punctuation:/:/}}}}};
+!function(u){var e=u.languages.javascript["template-string"],n=e.pattern.source,a=e.inside.interpolation,i=a.inside["interpolation-punctuation"],r=a.pattern.source;function t(e,t){if(u.languages[e])return{pattern:RegExp("((?:"+t+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:e}}}}function s(e,t,n){var r={code:e,grammar:t,language:n};return u.hooks.run("before-tokenize",r),r.tokens=u.tokenize(r.code,r.grammar),u.hooks.run("after-tokenize",r),r.tokens}function d(e){var t={};t["interpolation-punctuation"]=i;var n=u.tokenize(e,t);if(3===n.length){var r=[1,1];r.push.apply(r,s(n[1],u.languages.javascript,"javascript")),n.splice.apply(n,r)}return new u.Token("interpolation",n,a.alias,e)}function c(a,e,i){var t=u.tokenize(a,{interpolation:{pattern:RegExp(r),lookbehind:!0}}),f=0,y={},n=s(t.map(function(e){if("string"==typeof e)return e;for(var t,n=e.content;-1!==a.indexOf((r=f++,t="___"+i.toUpperCase()+"_"+r+"___")););return y[t]=n,t;var r}).join(""),e,i),v=Object.keys(y);return f=0,function e(t){for(var n=0;n<t.length;n++){if(f>=v.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=v[f],i="string"==typeof r?r:r.content,s=i.indexOf(a);if(-1!==s){++f;var o=i.substring(0,s),p=d(y[a]),l=i.substring(s+a.length),g=[];if(o&&g.push(o),g.push(p),l){var u=[l];e(u),g.push.apply(g,u)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(g)),n+=g.length-1):r.content=g}}else{var c=r.content;Array.isArray(c)?e(c):e([c])}}}(n),new u.Token(i,n,"language-"+i,a)}u.languages.javascript["template-string"]=[t("css","\\b(?:styled(?:\\([^)]*\\))?(?:\\s*\\.\\s*\\w+(?:\\([^)]*\\))*)*|css(?:\\s*\\.\\s*(?:global|resolve))?|createGlobalStyle|keyframes)"),t("html","\\bhtml|\\.\\s*(?:inner|outer)HTML\\s*\\+?="),t("svg","\\bsvg"),t("markdown","\\b(?:md|markdown)"),t("graphql","\\b(?:gql|graphql(?:\\s*\\.\\s*experimental)?)"),t("sql","\\bsql"),e].filter(Boolean);var o={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}u.hooks.add("after-tokenize",function(e){e.language in o&&!function e(t){for(var n=0,r=t.length;n<r;n++){var a=t[n];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var o=f(s),p=s.alias,l=Array.isArray(p)?p[0]:p,g=u.languages[l];if(!g)continue;i[1]=c(o,g,l)}}else e(i);else"string"!=typeof i&&e([i])}}}(e.tokens)})}(Prism);
+!function(e){function n(e){return RegExp("(\\()"+e+"(?=[\\s\\)])")}function a(e){return RegExp("([\\s([])"+e+"(?=[\\s)])")}var t="[-+*/_~!@$%^=<>{}\\w]+",r="(\\()",s="(?=\\))",i="(?=\\s)",o={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+t+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+t),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+t),alias:"property"},splice:{pattern:RegExp(",@?"+t),alias:["symbol","variable"]},keyword:[{pattern:RegExp(r+"(?:(?:lexical-)?let\\*?|(?:cl-)?letf|if|when|while|unless|cons|cl-loop|and|or|not|cond|setq|error|message|null|require|provide|use-package)"+i),lookbehind:!0},{pattern:RegExp(r+"(?:for|do|collect|return|finally|append|concat|in|by)"+i),lookbehind:!0}],declare:{pattern:n("declare"),lookbehind:!0,alias:"keyword"},interactive:{pattern:n("interactive"),lookbehind:!0,alias:"keyword"},boolean:{pattern:a("(?:t|nil)"),lookbehind:!0},number:{pattern:a("[-+]?\\d+(?:\\.\\d*)?"),lookbehind:!0},defvar:{pattern:RegExp(r+"def(?:var|const|custom|group)\\s+"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp(r+"(?:cl-)?(?:defun\\*?|defmacro)\\s+"+t+"\\s+\\([\\s\\S]*?\\)"),lookbehind:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(r+"lambda\\s+\\(\\s*(?:&?"+t+"(?:\\s+&?"+t+")*\\s*)?\\)"),lookbehind:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},l={"lisp-marker":RegExp("&[-+*/_~!@$%^=<>{}\\w]+"),rest:{argument:{pattern:RegExp(t),alias:"variable"},varform:{pattern:RegExp(r+t+"\\s+\\S[\\s\\S]*"+s),lookbehind:!0,inside:{string:o.string,boolean:o.boolean,number:o.number,symbol:o.symbol,punctuation:/[()]/}}}},p="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(r+"[\\s\\S]*"+s),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:rest|body)\\s+"+p),inside:l},"other-marker-vars":{pattern:RegExp("&(?:optional|aux)\\s+"+p),inside:l},keys:{pattern:RegExp("&key\\s+"+p+"(?:\\s+&allow-other-keys)?"),inside:l},argument:{pattern:RegExp(t),alias:"variable"},punctuation:/[()]/}};o.lambda.inside.arguments=d,o.defun.inside.arguments=e.util.clone(d),o.defun.inside.arguments.inside.sublist=d,e.languages.lisp=o,e.languages.elisp=o,e.languages.emacs=o,e.languages["emacs-lisp"]=o}(Prism);
+Prism.languages.livescript={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\])#.*/,lookbehind:!0}],"interpolated-string":{pattern:/(^|[^"])("""|")(?:\\[\s\S]|(?!\2)[^\\])*\2(?!")/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(^|[^\\])#[a-z_](?:-?[a-z]|[\d_])*/m,lookbehind:!0},interpolation:{pattern:/(^|[^\\])#\{[^}]+\}/m,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^#\{|\}$/,alias:"variable"}}},string:/[\s\S]+/}},string:[{pattern:/('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},{pattern:/<\[[\s\S]*?\]>/,greedy:!0},/\\[^\s,;\])}]+/],regex:[{pattern:/\/\/(?:\[[^\r\n\]]*\]|\\.|(?!\/\/)[^\\\[])+\/\/[gimyu]{0,5}/,greedy:!0,inside:{comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0}}},{pattern:/\/(?:\[[^\r\n\]]*\]|\\.|[^/\\\r\n\[])+\/[gimyu]{0,5}/,greedy:!0}],keyword:{pattern:/(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,lookbehind:!0},"keyword-operator":{pattern:/(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,lookbehind:!0,alias:"operator"},boolean:{pattern:/(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,lookbehind:!0},argument:{pattern:/(^|(?!\.&\.)[^&])&(?!&)\d*/m,lookbehind:!0,alias:"variable"},number:/\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,identifier:/[a-z_](?:-?[a-z]|[\d_])*/i,operator:[{pattern:/( )\.(?= )/,lookbehind:!0},/\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/],punctuation:/[(){}\[\]|.,:;`]/},Prism.languages.livescript["interpolated-string"].inside.interpolation.inside.rest=Prism.languages.livescript;
+Prism.languages.log={string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/,greedy:!0},level:[{pattern:/\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/,alias:["error","important"]},{pattern:/\b(?:WARN|WARNING|WRN)\b/,alias:["warning","important"]},{pattern:/\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\b/,alias:["info","keyword"]},{pattern:/\b(?:DBG|DEBUG|FINE)\b/,alias:["debug","keyword"]},{pattern:/\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\b/,alias:["trace","comment"]}],property:{pattern:/((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im,lookbehind:!0},separator:{pattern:/(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m,lookbehind:!0,alias:"comment"},url:/\b(?:https?|ftp|file):\/\/[^\s|,;'"]*[^\s|,;'">.]/,email:{pattern:/(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/,lookbehind:!0,alias:"url"},"ip-address":{pattern:/\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/i,alias:"constant"},"mac-address":{pattern:/\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i,alias:"constant"},domain:{pattern:/(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/,lookbehind:!0,alias:"constant"},uuid:{pattern:/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i,alias:"constant"},hash:{pattern:/\b(?:[a-f0-9]{32}){1,2}\b/i,alias:"constant"},"file-path":{pattern:/\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i,lookbehind:!0,greedy:!0,alias:"string"},date:{pattern:RegExp("\\b\\d{4}[-/]\\d{2}[-/]\\d{2}(?:T(?=\\d{1,2}:)|(?=\\s\\d{1,2}:))|\\b\\d{1,4}[-/ ](?:\\d{1,2}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[-/ ]\\d{2,4}T?\\b|\\b(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:\\s{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))?|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s{1,2}\\d{1,2}\\b","i"),alias:"number"},time:{pattern:/\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2}:?\d{2}|Z)?\b/,alias:"number"},boolean:/\b(?:true|false|null)\b/i,number:{pattern:/(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i,lookbehind:!0},operator:/[;:?<=>~/@!$%&+\-|^(){}*#]/,punctuation:/[\[\].,]/};
+Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/};
+Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/};
+!function(s){function n(n){return n=n.replace(/<inner>/g,function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var e="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,function(){return e}),a="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";s.languages.markdown=s.languages.extend("markup",{}),s.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:s.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+a+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+a+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(e),inside:s.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(e),alias:"important",inside:s.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~)<inner>)+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n('!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\])<inner>)+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(e){["url","bold","italic","strike","code-snippet"].forEach(function(n){e!==n&&(s.languages.markdown[e].inside.content.inside[n]=s.languages.markdown[n])})}),s.hooks.add("after-tokenize",function(n){"markdown"!==n.language&&"md"!==n.language||!function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t<a;t++){var r=e[t];if("code"===r.type){var i=r.content[1],o=r.content[3];if(i&&o&&"code-language"===i.type&&"code-block"===o.type&&"string"==typeof i.content){var l=i.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());o.alias?"string"==typeof o.alias?o.alias=[o.alias,s]:o.alias.push(s):o.alias=[s]}}else n(r.content)}}(n.tokens)}),s.hooks.add("wrap",function(n){if("code-block"===n.type){for(var e="",t=0,a=n.classes.length;t<a;t++){var r=n.classes[t],i=/language-(.+)/.exec(r);if(i){e=i[1];break}}var o=s.languages[e];if(o)n.content=s.highlight(function(n){var e=n.replace(d,"");return e=e.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(n,e){var t;if("#"===(e=e.toLowerCase())[0])return t="x"===e[1]?parseInt(e.slice(2),16):Number(e.slice(1)),u(t);var a=p[e];return a||n})}(n.content),o,e);else if(e&&"none"!==e&&s.plugins.autoloader){var l="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());n.attributes.id=l,s.plugins.autoloader.loadLanguages(e,function(){var n=document.getElementById(l);n&&(n.innerHTML=s.highlight(n.textContent,s.languages[e],e))})}}});var d=RegExp(s.languages.markup.tag.pattern.source,"gi"),p={amp:"&",lt:"<",gt:">",quot:'"'},u=String.fromCodePoint||String.fromCharCode;s.languages.md=s.languages.markdown}(Prism);
+!function(e){var n=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;Prism.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:n}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:n}},punctuation:/[{};]/}}();
+Prism.languages.nim={comment:/#.*/,string:{pattern:/(?:(?:\b(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+)?(?:"""[\s\S]*?"""(?!")|"(?:\\[\s\S]|""|[^"\\])*")|'(?:\\(?:\d+|x[\da-fA-F]{2}|.)|[^'])')/,greedy:!0},number:/\b(?:0[xXoObB][\da-fA-F_]+|\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:[eE][+-]?\d[\d_]*)?)(?:'?[iuf]\d*)?/,keyword:/\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\b/,function:{pattern:/(?:(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+|`[^`\r\n]+`)\*?(?:\[[^\]]+\])?(?=\s*\()/,inside:{operator:/\*$/}},ignore:{pattern:/`[^`\r\n]+`/,inside:{punctuation:/`/}},operator:{pattern:/(^|[({\[](?=\.\.)|(?![({\[]\.).)(?:(?:[=+\-*\/<>@$~&%|!?^:\\]|\.\.|\.(?![)}\]]))+|\b(?:and|div|of|or|in|is|isnot|mod|not|notin|shl|shr|xor)\b)/m,lookbehind:!0},punctuation:/[({\[]\.|\.[)}\]]|[`(){}\[\],:]/};
+Prism.languages.nix={comment:/\/\*[\s\S]*?\*\/|#.*/,string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,lookbehind:!0,inside:{antiquotation:{pattern:/^\$(?=\{)/,alias:"variable"}}}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"variable"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:url|Tarball)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:true|false)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside.rest=Prism.languages.nix;
+Prism.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[{pattern:/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:/\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/sub \w+/i,inside:{keyword:/sub/}},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/};
+!function(e){var i=Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:{function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:{}}}},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:true|false)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(?:!|-(?:eq|ne|gt|ge|lt|le|sh[lr]|not|b?(?:and|x?or)|(?:Not)?(?:Like|Match|Contains|In)|Replace|Join|is(?:Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},r=i.string[0].inside;r.boolean=i.boolean,r.variable=i.variable,r.function.inside=i}();
+!function(e){for(var r="(?:[^\\\\()[\\]{}\"'/]|<string>|/(?![*/])|<comment>|\\(<expr>*\\)|\\[<expr>*\\]|\\{<expr>*\\}|\\\\[^])".replace(/<string>/g,function(){return"\"(?:\\\\.|[^\\\\\"\r\n])*\"|'(?:\\\\.|[^\\\\'\r\n])*'"}).replace(/<comment>/g,function(){return"//.*(?!.)|/\\*(?:[^*]|\\*(?!/))*\\*/"}),n=0;n<2;n++)r=r.replace(/<expr>/g,function(){return r});r=r.replace(/<expr>/g,"[^\\s\\S]"),e.languages.qml={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},"javascript-function":{pattern:RegExp("((?:^|;)[ \t]*)function\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*\\(<js>*\\)\\s*\\{<js>*\\}".replace(/<js>/g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},"class-name":{pattern:/((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\w+(?:\.\w+)*/}}],"javascript-expression":{pattern:RegExp("(:[ \t]*)(?![\\s;}[])(?:(?!$|[;}])<js>)+".replace(/<js>/g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},string:/"(?:\\.|[^\\"\r\n])*"/,keyword:/\b(?:as|import|on)\b/,punctuation:/[{}[\]:;,]/}}(Prism);
+!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby.function,e.languages.insertBefore("ruby","keyword",{regex:[{pattern:RegExp("%r(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^])*\\)","\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[^])*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\]","<(?:[^<>\\\\]|\\\\[^])*>"].join("|")+")[egimnosux]{0,6}"),greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:n}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{function:/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp("%[qQiIwWxs]?(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^])*\\)","\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[^])*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\]","<(?:[^<>\\\\]|\\\\[^])*>"].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:n}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?/}},interpolation:n}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?'|'$/}}}}],e.languages.rb=e.languages.ruby}(Prism);
+!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|<self>)*\\*/",t=0;t<2;t++)a=a.replace(/<self>/g,function(){return a});a=a.replace(/<self>/g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism);
+!function(s){var n=['"(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^"\\\\`$])*"',"'[^']*'","\\$'(?:[^'\\\\]|\\\\[^])*'","<<-?\\s*([\"']?)(\\w+)\\1\\s[^]*?[\r\n]\\2"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#*!/\\\\]+@[^\r\n@:$#*!/\\\\]+(?::[^\0-\\x1F$#*?"<>:;|]+)?|[^\0-\\x1F$#*?"<>@:;|]+)?[$#]'+"(?:[^\\\\\r\n'\"<$]|\\\\(?:[^\r]|\r\n?)|\\$(?!')|<<str>>)+".replace(/<<str>>/g,function(){return n}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$]+/,alias:"punctuation",inside:{user:/^[^\s@:$#*!/\\]+@[^\r\n@:$#*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism);
+Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|IN|ILIKE|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/};
+Prism.languages.swift=Prism.languages.extend("clike",{string:{pattern:/("|')(?:\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[^(])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/\\\((?:[^()]|\([^)]+\))+\)/,inside:{delimiter:{pattern:/^\\\(|\)$/,alias:"variable"}}}}},keyword:/\b(?:actor|as|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonisolated|nonmutating|operator|optional|override|postfix|precedence|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|some|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,constant:/\b(?:nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,atrule:/@\b(?:IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,builtin:/\b(?:[A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/}),Prism.languages.swift.string.inside.interpolation.inside.rest=Prism.languages.swift;
+!function(e){function n(e){return e.replace(/__/g,function(){return"(?:[\\w-]+|'[^'\n\r]*'|\"(?:\\\\.|[^\\\\\"\r\n])*\")"})}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n("(^[\t ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n("(^[\t ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:true|false)\b/,punctuation:/[.,=[\]{}]/}}(Prism);
+Prism.languages.uri={scheme:{pattern:/^[a-z][a-z0-9+.-]*:/im,greedy:!0,inside:{"scheme-delimiter":/:$/}},fragment:{pattern:/#[\w\-.~!$&'()*+,;=%:@/?]*/,inside:{"fragment-delimiter":/^#/}},query:{pattern:/\?[\w\-.~!$&'()*+,;=%:@/?]*/,inside:{"query-delimiter":{pattern:/^\?/,greedy:!0},"pair-delimiter":/[&;]/,pair:{pattern:/^[^=][\s\S]*/,inside:{key:/^[^=]+/,value:{pattern:/(^=)[\s\S]+/,lookbehind:!0}}}}},authority:{pattern:RegExp("^//(?:[\\w\\-.~!$&'()*+,;=%:]*@)?(?:\\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\\.[\\w\\-.~!$&'()*+,;=]+)\\]|[\\w\\-.~!$&'()*+,;=%]*)(?::\\d*)?","m"),inside:{"authority-delimiter":/^\/\//,"user-info-segment":{pattern:/^[\w\-.~!$&'()*+,;=%:]*@/,inside:{"user-info-delimiter":/@$/,"user-info":/^[\w\-.~!$&'()*+,;=%:]+/}},"port-segment":{pattern:/:\d*$/,inside:{"port-delimiter":/^:/,port:/^\d+/}},host:{pattern:/[\s\S]+/,inside:{"ip-literal":{pattern:/^\[[\s\S]+\]$/,inside:{"ip-literal-delimiter":/^\[|\]$/,"ipv-future":/^v[\s\S]+/,"ipv6-address":/^[\s\S]+/}},"ipv4-address":/^(?:(?:[03-9]\d?|[12]\d{0,2})\.){3}(?:[03-9]\d?|[12]{0,2})$/}}}},path:{pattern:/^[\w\-.~!$&'()*+,;=%:@/]+/m,inside:{"path-separator":/\//}}},Prism.languages.url=Prism.languages.uri;
+Prism.languages.vala=Prism.languages.extend("clike",{"class-name":[{pattern:/\b[A-Z]\w*(?:\.\w+)*\b(?=(?:\?\s+|\*?\s+\*?)\w)/,inside:{punctuation:/\./}},{pattern:/(\[)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/((?:\b(?:class|interface|new|struct|enum)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}}],keyword:/\b(?:bool|char|double|float|null|size_t|ssize_t|string|unichar|void|int|int8|int16|int32|int64|long|short|uchar|uint|uint8|uint16|uint32|uint64|ulong|ushort|class|delegate|enum|errordomain|interface|namespace|struct|break|continue|do|for|foreach|return|while|else|if|switch|assert|case|default|abstract|const|dynamic|ensures|extern|inline|internal|override|private|protected|public|requires|signal|static|virtual|volatile|weak|async|owned|unowned|try|catch|finally|throw|as|base|construct|delete|get|in|is|lock|new|out|params|ref|sizeof|set|this|throws|typeof|using|value|var|yield)\b/i,function:/\b\w+(?=\s*\()/,number:/(?:\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?:f|u?l?)?/i,operator:/\+\+|--|&&|\|\||<<=?|>>=?|=>|->|~|[+\-*\/%&^|=!<>]=?|\?\??|\.\.\./,punctuation:/[{}[\];(),.:]/,constant:/\b[A-Z0-9_]+\b/}),Prism.languages.insertBefore("vala","string",{"raw-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},"template-string":{pattern:/@"[\s\S]*?"/,greedy:!0,inside:{interpolation:{pattern:/\$(?:\([^)]*\)|[a-zA-Z]\w*)/,inside:{delimiter:{pattern:/^\$\(?|\)$/,alias:"punctuation"},rest:Prism.languages.vala}},string:/[\s\S]+/}}}),Prism.languages.insertBefore("vala","keyword",{regex:{pattern:/\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\//,"regex-flags":/^[a-z]+$/}}});
+Prism.languages.wiki=Prism.languages.extend("markup",{"block-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},heading:{pattern:/^(=+)[^=\r\n].*?\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\1/,inside:{"bold-italic":{pattern:/(''''').+?(?=\1)/,lookbehind:!0,alias:["bold","italic"]},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:"punctuation"},url:[/ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:RFC|PMID) +\d+/i,/\[\[.+?\]\]|\[.+?\]/],variable:[/__[A-Z]+__/,/\{{3}.+?\}{3}/,/\{\{.+?\}\}/],symbol:[/^#redirect/im,/~{3,5}/],"table-tag":{pattern:/((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m,lookbehind:!0,inside:{"table-bar":{pattern:/\|$/,alias:"punctuation"},rest:Prism.languages.markup.tag.inside}},punctuation:/^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m}),Prism.languages.insertBefore("wiki","tag",{nowiki:{pattern:/<(nowiki|pre|source)\b[^>]*>[\s\S]*?<\/\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\b[^>]*>|<\/(?:nowiki|pre|source)>/i,inside:Prism.languages.markup.tag.inside}}}});
+!function(n){function a(a,e){n.languages[a]&&n.languages.insertBefore(a,"comment",{"doc-comment":e})}var e=n.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:e}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:e}};a("csharp",t),a("fsharp",t),a("vbnet",g)}(Prism);
+!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*".replace(/<PLAIN>/g,function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"}),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<<prop>>/g,function(){return t}).replace(/<<value>>/g,function(){return e});return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<<prop>>/g,function(){return t})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\\s*:\\s)".replace(/<<prop>>/g,function(){return t}).replace(/<<key>>/g,function(){return"(?:"+a+"|"+d+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("true|false","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector){var t,o="line-numbers",s="linkable-line-numbers",a=function(){if(void 0===t){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML="&nbsp;<br />&nbsp;",document.body.appendChild(e),t=38===e.offsetHeight,document.body.removeChild(e)}return t},l=!0,u=0;Prism.hooks.add("before-sanity-check",function(e){var t=e.element.parentElement;if(c(t)){var n=0;v(".line-highlight",t).forEach(function(e){n+=e.textContent.length,e.parentNode.removeChild(e)}),n&&/^(?: \n)+$/.test(e.code.slice(-n))&&(e.code=e.code.slice(0,-n))}}),Prism.hooks.add("complete",function e(t){var n=t.element.parentElement;if(c(n)){clearTimeout(u);var i=Prism.plugins.lineNumbers,r=t.plugins&&t.plugins.lineNumbers;if(b(n,o)&&i&&!r)Prism.hooks.add("line-numbers",e);else d(n)(),u=setTimeout(f,1)}}),window.addEventListener("hashchange",f),window.addEventListener("resize",function(){v("pre").filter(c).map(function(e){return d(e)}).forEach(y)})}function v(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function b(e,t){return e.classList.contains(t)}function y(e){e()}function c(e){return!(!e||!/pre/i.test(e.nodeName))&&(!!e.hasAttribute("data-line")||!(!e.id||!Prism.util.isActive(e,s)))}function d(u,e,c){var t=(e="string"==typeof e?e:u.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+u.getAttribute("data-line-offset")||0,f=(a()?parseInt:parseFloat)(getComputedStyle(u).lineHeight),p=Prism.util.isActive(u,o),n=u.querySelector("code"),h=p?u:n||u,m=[],g=n&&h!=n?function(e,t){var n=getComputedStyle(e),i=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(i.borderTopWidth)+r(i.paddingTop)-r(n.paddingTop)}(u,n):0;t.forEach(function(e){var t=e.split("-"),n=+t[0],i=+t[1]||n,r=u.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(m.push(function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"}),p&&Prism.plugins.lineNumbers){var o=Prism.plugins.lineNumbers.getLine(u,n),s=Prism.plugins.lineNumbers.getLine(u,i);if(o){var a=o.offsetTop+g+"px";m.push(function(){r.style.top=a})}if(s){var l=s.offsetTop-o.offsetTop+s.offsetHeight+"px";m.push(function(){r.style.height=l})}}else m.push(function(){r.setAttribute("data-start",String(n)),n<i&&r.setAttribute("data-end",String(i)),r.style.top=(n-d-1)*f+g+"px",r.textContent=new Array(i-n+2).join(" \n")});m.push(function(){h.appendChild(r)})});var i=u.id;if(p&&Prism.util.isActive(u,s)&&i){b(u,s)||m.push(function(){u.classList.add(s)});var r=parseInt(u.getAttribute("data-start")||"1");v(".line-numbers-rows > span",u).forEach(function(e,t){var n=t+r;e.onclick=function(){var e=i+"."+n;l=!1,location.hash=e,setTimeout(function(){l=!0},1)}})}return function(){m.forEach(y)}}function f(){var e=location.hash.slice(1);v(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var n=e.slice(0,e.lastIndexOf(".")),i=document.getElementById(n);if(i)i.hasAttribute("data-line")||i.setAttribute("data-line",""),d(i,t,"temporary ")(),l&&document.querySelector(".temporary.line-highlight").scrollIntoView()}}}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows");if(t){var i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n<i&&(n=i),r<n&&(n=r);var s=n-i;return t.children[s]}}},resize:function(e){u([e])},assumeViewportIndependence:!0},n=void 0;window.addEventListener("resize",function(){e.assumeViewportIndependence&&n===window.innerWidth||(n=window.innerWidth,u(Array.prototype.slice.call(document.querySelectorAll("pre."+o))))}),Prism.hooks.add("complete",function(e){if(e.code){var n=e.element,t=n.parentNode;if(t&&/pre/i.test(t.nodeName)&&!n.querySelector(".line-numbers-rows")&&Prism.util.isActive(n,o)){n.classList.remove(o),t.classList.add(o);var i,r=e.code.match(a),s=r?r.length+1:1,l=new Array(s+1).join("<span></span>");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null}(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1<e.length){var t=i.appendChild(document.createElement("span"));t.style.display="block",t.textContent=e}else r[n]=s})}),n.forEach(function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r<t.length;r++)void 0===t[r]&&(t[r]=n.children[i++].getBoundingClientRect().height)}),n.forEach(function(e){var n=e.sizer,t=e.element.querySelector(".line-numbers-rows");n.style.display="none",n.innerHTML="",e.lineHeights.forEach(function(e,n){t.children[n].style.height=e+"px"})})}}}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var o={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},h="data-src-status",g="loading",c="loaded",u="pre[data-src]:not(["+h+'="'+c+'"]):not(['+h+'="'+g+'"])',n=/\blang(?:uage)?-([\w-]+)\b/i;Prism.hooks.add("before-highlightall",function(e){e.selector+=", "+u}),Prism.hooks.add("before-sanity-check",function(e){var t=e.element;if(t.matches(u)){e.code="",t.setAttribute(h,g);var i=t.appendChild(document.createElement("CODE"));i.textContent="Loading…";var n=t.getAttribute("data-src"),s=e.language;if("none"===s){var a=(/\.(\w+)$/.exec(n)||[,"none"])[1];s=o[a]||a}p(i,s),p(t,s);var r=Prism.plugins.autoloader;r&&r.loadLanguages(s);var l=new XMLHttpRequest;l.open("GET",n,!0),l.onreadystatechange=function(){4==l.readyState&&(l.status<400&&l.responseText?(t.setAttribute(h,c),i.textContent=l.responseText,Prism.highlightElement(i)):(t.setAttribute(h,"failed"),400<=l.status?i.textContent=function(e,t){return"✖ Error "+e+" while fetching file: "+t}(l.status,l.statusText):i.textContent="✖ Error: File does not exist or is empty"))},l.send(null)}});var e=!(Prism.plugins.fileHighlight={highlight:function(e){for(var t,i=(e||document).querySelectorAll(u),n=0;t=i[n++];)Prism.highlightElement(t)}});Prism.fileHighlight=function(){e||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),e=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}function p(e,t){var i=e.className;i=i.replace(n," ")+" language-"+t,e.className=i.replace(/\s+/g," ").trim()}}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var i=[],l={},d=function(){};Prism.plugins.toolbar={};var e=Prism.plugins.toolbar.registerButton=function(e,n){var t;t="function"==typeof n?n:function(e){var t;return"function"==typeof n.onClick?((t=document.createElement("button")).type="button",t.addEventListener("click",function(){n.onClick.call(this,e)})):"string"==typeof n.url?(t=document.createElement("a")).href=n.url:t=document.createElement("span"),n.className&&t.classList.add(n.className),t.textContent=n.text,t},e in l?console.warn('There is a button with the key "'+e+'" registered already.'):i.push(l[e]=t)},t=Prism.plugins.toolbar.hook=function(a){var e=a.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&!e.parentNode.classList.contains("code-toolbar")){var t=document.createElement("div");t.classList.add("code-toolbar"),e.parentNode.insertBefore(t,e),t.appendChild(e);var r=document.createElement("div");r.classList.add("toolbar");var n=i,o=function(e){for(;e;){var t=e.getAttribute("data-toolbar-order");if(null!=t)return(t=t.trim()).length?t.split(/\s*,\s*/g):[];e=e.parentElement}}(a.element);o&&(n=o.map(function(e){return l[e]||d})),n.forEach(function(e){var t=e(a);if(t){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(t),r.appendChild(n)}}),t.appendChild(r)}};e("label",function(e){var t=e.element.parentNode;if(t&&/pre/i.test(t.nodeName)&&t.hasAttribute("data-label")){var n,a,r=t.getAttribute("data-label");try{a=document.querySelector("template#"+r)}catch(e){}return a?n=a.content:(t.hasAttribute("data-url")?(n=document.createElement("a")).href=t.getAttribute("data-url"):n=document.createElement("span"),n.textContent=r),n}}),Prism.hooks.add("complete",t)}}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document)if(Prism.plugins.toolbar){var i={none:"Plain text",plain:"Plain text",plaintext:"Plain text",text:"Plain text",txt:"Plain text",html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",rss:"RSS",css:"CSS",clike:"C-like",js:"JavaScript",abap:"ABAP",abnf:"ABNF",al:"AL",antlr4:"ANTLR4",g4:"ANTLR4",apacheconf:"Apache Configuration",apl:"APL",aql:"AQL",arff:"ARFF",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aspnet:"ASP.NET (C#)",asm6502:"6502 Assembly",autohotkey:"AutoHotkey",autoit:"AutoIt",basic:"BASIC",bbcode:"BBcode",bnf:"BNF",rbnf:"RBNF",bsl:"BSL (1C:Enterprise)",oscript:"OneScript",csharp:"C#",cs:"C#",dotnet:"C#",cpp:"C++",cfscript:"CFScript",cfc:"CFScript",cil:"CIL",cmake:"CMake",cobol:"COBOL",coffee:"CoffeeScript",conc:"Concurnas",csp:"Content-Security-Policy","css-extras":"CSS Extras",csv:"CSV",dataweave:"DataWeave",dax:"DAX",django:"Django/Jinja2",jinja2:"Django/Jinja2","dns-zone-file":"DNS zone file","dns-zone":"DNS zone file",dockerfile:"Docker",dot:"DOT (Graphviz)",gv:"DOT (Graphviz)",ebnf:"EBNF",editorconfig:"EditorConfig",ejs:"EJS",etlua:"Embedded Lua templating",erb:"ERB","excel-formula":"Excel Formula",xlsx:"Excel Formula",xls:"Excel Formula",fsharp:"F#","firestore-security-rules":"Firestore security rules",ftl:"FreeMarker Template Language",gml:"GameMaker Language",gamemakerlanguage:"GameMaker Language",gcode:"G-code",gdscript:"GDScript",gedcom:"GEDCOM",glsl:"GLSL",graphql:"GraphQL",hbs:"Handlebars",hs:"Haskell",hcl:"HCL",hlsl:"HLSL",http:"HTTP",hpkp:"HTTP Public-Key-Pins",hsts:"HTTP Strict-Transport-Security",ichigojam:"IchigoJam","icu-message-format":"ICU Message Format",idr:"Idris",ignore:".ignore",gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore",inform7:"Inform 7",javadoc:"JavaDoc",javadoclike:"JavaDoc-like",javastacktrace:"Java stack trace",jq:"JQ",jsdoc:"JSDoc","js-extras":"JS Extras",json:"JSON",webmanifest:"Web App Manifest",json5:"JSON5",jsonp:"JSONP",jsstacktrace:"JS stack trace","js-templates":"JS Templates",kts:"Kotlin Script",kt:"Kotlin",kumir:"KuMir (КуМир)",kum:"KuMir (КуМир)",latex:"LaTeX",tex:"TeX",context:"ConTeXt",lilypond:"LilyPond",ly:"LilyPond",emacs:"Lisp",elisp:"Lisp","emacs-lisp":"Lisp",llvm:"LLVM IR",log:"Log file",lolcode:"LOLCODE",md:"Markdown","markup-templating":"Markup templating",matlab:"MATLAB",mel:"MEL",mongodb:"MongoDB",moon:"MoonScript",n1ql:"N1QL",n4js:"N4JS",n4jsd:"N4JS","nand2tetris-hdl":"Nand To Tetris HDL",naniscript:"Naninovel Script",nani:"Naninovel Script",nasm:"NASM",neon:"NEON",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",objc:"Objective-C",ocaml:"OCaml",opencl:"OpenCL",openqasm:"OpenQasm",qasm:"OpenQasm",parigp:"PARI/GP",objectpascal:"Object Pascal",psl:"PATROL Scripting Language",pcaxis:"PC-Axis",px:"PC-Axis",peoplecode:"PeopleCode",pcode:"PeopleCode",php:"PHP",phpdoc:"PHPDoc","php-extras":"PHP Extras",plsql:"PL/SQL",powerquery:"PowerQuery",pq:"PowerQuery",mscript:"PowerQuery",powershell:"PowerShell",promql:"PromQL",properties:".properties",protobuf:"Protocol Buffers",purebasic:"PureBasic",pbfasm:"PureBasic",purs:"PureScript",py:"Python",qsharp:"Q#",qs:"Q#",q:"Q (kdb+ database)",qml:"QML",rkt:"Racket",jsx:"React JSX",tsx:"React TSX",renpy:"Ren'py",rpy:"Ren'py",rest:"reST (reStructuredText)",robotframework:"Robot Framework",robot:"Robot Framework",rb:"Ruby",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)","shell-session":"Shell session","sh-session":"Shell session",shellsession:"Shell session",sml:"SML",smlnj:"SML/NJ",solidity:"Solidity (Ethereum)",sol:"Solidity (Ethereum)","solution-file":"Solution file",sln:"Solution file",soy:"Soy (Closure Template)",sparql:"SPARQL",rq:"SPARQL","splunk-spl":"Splunk SPL",sqf:"SQF: Status Quo Function (Arma 3)",sql:"SQL",iecst:"Structured Text (IEC 61131-3)","t4-templating":"T4 templating","t4-cs":"T4 Text Templates (C#)",t4:"T4 Text Templates (C#)","t4-vb":"T4 Text Templates (VB)",tap:"TAP",tt2:"Template Toolkit 2",toml:"TOML",trig:"TriG",ts:"TypeScript",tsconfig:"TSConfig",uscript:"UnrealScript",uc:"UnrealScript",uri:"URI",url:"URL",vbnet:"VB.Net",vhdl:"VHDL",vim:"vim","visual-basic":"Visual Basic",vba:"VBA",vb:"Visual Basic",wasm:"WebAssembly",wiki:"Wiki markup",wolfram:"Wolfram language",nb:"Mathematica Notebook",wl:"Wolfram language",xeoracube:"XeoraCube","xml-doc":"XML doc (.net)",xojo:"Xojo (REALbasic)",xquery:"XQuery",yaml:"YAML",yml:"YAML",yang:"YANG"};Prism.plugins.toolbar.registerButton("show-language",function(e){var a=e.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var t,s=a.getAttribute("data-language")||i[e.language]||((t=e.language)?(t.substring(0,1).toUpperCase()+t.substring(1)).replace(/s(?=cript)/,"S"):t);if(s){var o=document.createElement("span");return o.textContent=s,o}}})}else console.warn("Show Languages plugin loaded before Toolbar plugin.")}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var a=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,c=/^#?((?:[\da-f]){3,4}|(?:[\da-f]{2}){3,4})$/i,l=[function(n){var r=c.exec(n);if(r){for(var o=6<=(n=r[1]).length?2:1,s=n.length/o,e=1==o?1/15:1/255,t=[],i=0;i<s;i++){var a=parseInt(n.substr(i*o,o),16);t.push(a*e)}return 3==s&&t.push(1),"rgba("+t.slice(0,3).map(function(n){return String(Math.round(255*n))}).join(",")+","+String(Number(t[3].toFixed(3)))+")"}},function(n){var r=(new Option).style;return r.color=n,r.color?n:void 0}];Prism.hooks.add("wrap",function(n){if("color"===n.type||0<=n.classes.indexOf("color")){for(var r,o=n.content,s=o.split(a).join(""),e=0,t=l.length;e<t&&!r;e++)r=l[e](s);if(!r)return;var i='<span class="inline-color-wrapper"><span class="inline-color" style="background-color:'+r+';"></span></span>';n.content=i+o}})}}();
+!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var d=/(?:^|\s)command-line(?:\s|$)/,f="command-line-prompt",m="".startsWith?function(e,t){return e.startsWith(t)}:function(e,t){return 0===e.indexOf(t)};Prism.hooks.add("before-highlight",function(e){var t=h(e);if(!t.complete&&e.code){var n=e.element.parentElement;if(n&&/pre/i.test(n.nodeName)&&(d.test(n.className)||d.test(e.element.className))){var a=e.element.querySelector("."+f);a&&a.remove();var s=e.code.split("\n");t.numberOfLines=s.length;var o=t.outputLines=[],r=n.getAttribute("data-output"),i=n.getAttribute("data-filter-output");if(null!==r)r.split(",").forEach(function(e){var t=e.split("-"),n=parseInt(t[0],10),a=2===t.length?parseInt(t[1],10):n;if(!isNaN(n)&&!isNaN(a)){n<1&&(n=1),a>s.length&&(a=s.length),a--;for(var r=--n;r<=a;r++)o[r]=s[r],s[r]=""}});else if(i)for(var l=0;l<s.length;l++)m(s[l],i)&&(o[l]=s[l].slice(i.length),s[l]="");e.code=s.join("\n")}else t.complete=!0}else t.complete=!0}),Prism.hooks.add("before-insert",function(e){var t=h(e);if(!t.complete){for(var n=e.highlightedCode.split("\n"),a=t.outputLines||[],r=0,s=a.length;r<s;r++)a.hasOwnProperty(r)&&(n[r]=a[r]);e.highlightedCode=n.join("\n")}}),Prism.hooks.add("complete",function(e){if(function(e){return"command-line"in(e.vars=e.vars||{})}(e)){var t=h(e);if(!t.complete){var n,a=e.element.parentElement;d.test(e.element.className)&&(e.element.className=e.element.className.replace(d," ")),d.test(a.className)||(a.className+=" command-line");var r=t.numberOfLines||0,s=c("data-prompt","");if(""!==s)n=p('<span data-prompt="'+s+'"></span>',r);else n=p('<span data-user="'+c("data-user","user")+'" data-host="'+c("data-host","localhost")+'"></span>',r);var o=document.createElement("span");o.className=f,o.innerHTML=n;for(var i=t.outputLines||[],l=0,m=i.length;l<m;l++)if(i.hasOwnProperty(l)){var u=o.children[l];u.removeAttribute("data-user"),u.removeAttribute("data-host"),u.removeAttribute("data-prompt")}e.element.insertBefore(o,e.element.firstChild),t.complete=!0}}function c(e,t){return(a.getAttribute(e)||t).replace(/"/g,"&quot")}})}function p(e,t){for(var n="",a=0;a<t;a++)n+=e;return n}function h(e){var t=e.vars=e.vars||{};return t["command-line"]=t["command-line"]||{}}}();
+!function(){if("undefined"!=typeof Prism){var e={pattern:/(.)\bdata:[^\/]+\/[^,]+,(?:(?!\1)[\s\S]|\\\1)+(?=\1)/,lookbehind:!0,inside:{"language-css":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?css,)[\s\S]+/,lookbehind:!0},"language-javascript":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?javascript,)[\s\S]+/,lookbehind:!0},"language-json":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?json,)[\s\S]+/,lookbehind:!0},"language-markup":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?(?:html|xml),)[\s\S]+/,lookbehind:!0}}},r=["url","attr-value","string"];Prism.plugins.dataURIHighlight={processGrammar:function(i){i&&!i["data-uri"]&&(Prism.languages.DFS(i,function(i,a,n){-1<r.indexOf(n)&&!Array.isArray(a)&&(a.pattern||(a=this[i]={pattern:a}),a.inside=a.inside||{},"attr-value"==n?Prism.languages.insertBefore("inside",a.inside["url-link"]?"url-link":"punctuation",{"data-uri":e},a):a.inside["url-link"]?Prism.languages.insertBefore("inside","url-link",{"data-uri":e},a):a.inside["data-uri"]=e)}),i["data-uri"]=e)}},Prism.hooks.add("before-highlight",function(i){if(e.pattern.test(i.code))for(var a in e.inside)if(e.inside.hasOwnProperty(a)&&!e.inside[a].inside&&e.inside[a].pattern.test(i.code)){var n=a.match(/^language-(.+)/)[1];Prism.languages[n]&&(e.inside[a].inside={rest:(r=Prism.languages[n],Prism.plugins.autolinker&&Prism.plugins.autolinker.processGrammar(r),r)})}var r;Prism.plugins.dataURIHighlight.processGrammar(i.grammar)})}}();
+!function(){function u(t,e){t.addEventListener("click",function(){!function(t){navigator.clipboard?navigator.clipboard.writeText(t.getText()).then(t.success,function(){o(t)}):o(t)}(e)})}function o(e){var t=document.createElement("textarea");t.value=e.getText(),t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{var o=document.execCommand("copy");setTimeout(function(){o?e.success():e.error()},1)}catch(t){setTimeout(function(){e.error(t)},1)}document.body.removeChild(t)}"undefined"!=typeof Prism&&"undefined"!=typeof document&&(Prism.plugins.toolbar?Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(t){var e=t.element,o=function(t){var e={copy:"Copy","copy-error":"Press Ctrl+C to copy","copy-success":"Copied!","copy-timeout":5e3};for(var o in e){for(var n="data-prismjs-"+o,c=t;c&&!c.hasAttribute(n);)c=c.parentElement;c&&(e[o]=c.getAttribute(n))}return e}(e),n=document.createElement("button");n.className="copy-to-clipboard-button",n.setAttribute("type","button");var c=document.createElement("span");return n.appendChild(c),i("copy"),u(n,{getText:function(){return e.textContent},success:function(){i("copy-success"),r()},error:function(){i("copy-error"),setTimeout(function(){!function(t){window.getSelection().selectAllChildren(t)}(e)},1),r()}}),n;function r(){setTimeout(function(){i("copy")},o["copy-timeout"])}function i(t){c.textContent=o[t],n.setAttribute("data-copy-state",t)}}):console.warn("Copy to Clipboard plugin loaded before Toolbar plugin."))}();
+!function(){if("undefined"!=typeof Prism){var m=/^diff-([\w-]+)/i,d=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/gi,c=RegExp("(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n]))".replace(/__/g,function(){return d.source}),"gi"),a=!1;Prism.hooks.add("before-sanity-check",function(e){var i=e.language;m.test(i)&&!e.grammar&&(e.grammar=Prism.languages[i]=Prism.languages.diff)}),Prism.hooks.add("before-tokenize",function(e){a||Prism.languages.diff||Prism.plugins.autoloader||(a=!0,console.warn("Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin."));var i=e.language;m.test(i)&&!Prism.languages[i]&&(Prism.languages[i]=Prism.languages.diff)}),Prism.hooks.add("wrap",function(e){var i,a;if("diff"!==e.language){var s=m.exec(e.language);if(!s)return;i=s[1],a=Prism.languages[i]}var r=Prism.languages.diff&&Prism.languages.diff.PREFIXES;if(r&&e.type in r){var n,g=e.content.replace(d,"").replace(/&lt;/g,"<").replace(/&amp;/g,"&"),f=g.replace(/(^|[\r\n])./g,"$1");n=a?Prism.highlight(f,a,i):Prism.util.encode(f);var u,l=new Prism.Token("prefix",r[e.type],[/\w+/.exec(e.type)[0]]),t=Prism.Token.stringify(l,e.language),o=[];for(c.lastIndex=0;u=c.exec(n);)o.push(t+u[0]);/(?:^|[\r\n]).$/.test(g)&&o.push(t),e.content=o.join(""),a&&e.classes.push("language-"+i)}})}}();
+"undefined"!=typeof Prism&&(Prism.languages.treeview={"treeview-part":{pattern:/^.+/m,inside:{"entry-line":[{pattern:/\|-- |├── /,alias:"line-h"},{pattern:/\| {3}|│ {3}/,alias:"line-v"},{pattern:/`-- |└── /,alias:"line-v-last"},{pattern:/ {4}/,alias:"line-v-gap"}],"entry-name":{pattern:/.*\S.*/,inside:{operator:/ -> /}}}}},Prism.hooks.add("wrap",function(e){if("treeview"===e.language&&"entry-name"===e.type){var t=e.classes,n=/(^|[^\\])\/\s*$/;if(n.test(e.content))e.content=e.content.replace(n,"$1"),t.push("dir");else{e.content=e.content.replace(/(^|[^\\])[=*|]\s*$/,"$1");for(var a=e.content.toLowerCase().replace(/\s+/g,"").split(".");1<a.length;)a.shift(),t.push("ext-"+a.join("-"))}"."===e.content[0]&&t.push("dotfile")}}));
diff --git a/buildmydist-2/script/code.js b/buildmydist-2/script/code.js
new file mode 100644 (file)
index 0000000..32fe544
--- /dev/null
@@ -0,0 +1,11 @@
+//window.addEventListener("load", function(){
+{
+    Array.from(document.getElementsByClassName("code")).forEach(element =>{
+        var code  = element.innerText;
+        var Lang
+        element.classList.value.split(" ").forEach(className =>{
+            Lang = className.match("language-.+")
+        })
+        element.outerHTML = `<pre class="line-numbers"><code class="${Lang}">${code}</code></pre>`;
+    })
+}
diff --git a/buildmydist-2/script/easter.js b/buildmydist-2/script/easter.js
new file mode 100644 (file)
index 0000000..7539615
--- /dev/null
@@ -0,0 +1,10 @@
+window.addEventListener("load", function(){
+    var url = new URL(location.href)
+    if (url.pathname.split("/")[3] == "misc"){
+        document.getElementById("counter").addEventListener("click", function(){
+            if(localStorage.getItem("TopWarningHide") != "true"){
+                location.href = "http://www.lucky-ch.com/";
+            }
+        })
+    }
+})
diff --git a/buildmydist-2/script/footer.js b/buildmydist-2/script/footer.js
new file mode 100644 (file)
index 0000000..99ce0a1
--- /dev/null
@@ -0,0 +1,22 @@
+function FooterBlank(){
+    $("#footerblank").css({
+        paddingBottom: $("footer").outerHeight() + "px"
+    });
+
+    $("#scroll-up").css({
+        paddingBottom: $("footer").outerHeight() + "px"
+    })
+
+    $("#sidemenu-right").css({
+        paddingBottom: $("footer").outerHeight() + "px"
+    })
+
+    document.getElementById("scroll-up").addEventListener("click", function(){
+        //$("body, html").scrollTop(0);
+        $('body, html').animate({scrollTop: 0}, 300, 'swing');
+    })
+}
+
+FooterBlank();
+//window.addEventListener("load", FooterBlank);
+window.addEventListener("resize", FooterBlank);
diff --git a/buildmydist-2/script/footerFixed.js.no b/buildmydist-2/script/footerFixed.js.no
new file mode 100644 (file)
index 0000000..3b70e2a
--- /dev/null
@@ -0,0 +1,64 @@
+
+
+new function(){
+    var footer = document.getElementsByTagName("footer")[0];
+    function footerFixed(){
+        footer.style.top = "0px";
+        var ft = footer.offsetTop;
+        var fh = footer.offsetHeight;
+        if (window.innerHeight){
+            var wh = window.innerHeight;
+        }else if(document.documentElement && document.documentElement.clientHeight != 0){
+            var wh = document.documentElement.clientHeight;
+        }
+        if(ft+fh<wh){
+            footer.style.position = "relative";
+            footer.style.top = (wh-fh-ft)+"px";
+        }
+    }
+
+
+    function checkFontSize(func){
+        var e = document.createElement("div");
+        var s = document.createTextNode("S");
+        e.appendChild(s);
+        e.style.visibility="hidden"
+        e.style.position="absolute"
+        e.style.top="0"
+        document.body.appendChild(e);
+        var defHeight = e.offsetHeight;
+
+
+        function checkBoxSize(){
+            if(defHeight != e.offsetHeight){
+                func();
+                defHeight= e.offsetHeight;
+            }
+        }
+        setInterval(checkBoxSize,1000)
+    }
+
+    function addEvent(elm,listener,fn){
+        try{
+            elm.addEventListener(listener,fn,false);
+        }catch(e){
+            elm.attachEvent("on"+listener,fn);
+        }
+    }
+
+       function Run(){
+               checkFontSize(footerFixed);
+               footerFixed();
+       }
+       /*
+    addEvent(window,"load",footerFixed);
+    addEvent(window,"load",function(){
+        checkFontSize(footerFixed);
+    });
+    addEvent(window,"resize",footerFixed);
+       */
+
+       addEvent(window,"load", Run);
+       addEvent(window,"resize", footerFixed);
+
+}
\ No newline at end of file
diff --git a/buildmydist-2/script/header.js b/buildmydist-2/script/header.js
new file mode 100644 (file)
index 0000000..5c784d3
--- /dev/null
@@ -0,0 +1,87 @@
+// 現在のページ
+function SetCurrentPage(){
+    var distroBar = document.getElementById("bar-container");
+    //var barItemCount = distroBar.childElementCount;
+    var barItemList = distroBar.children
+    Array.from(barItemList).forEach(element => {
+        if (element.dataset.pagename == distro ){
+            element.classList.add("currentdistro");
+        }
+    });
+}
+
+SetCurrentPage();
+//window.addEventListener("load", SetCurrentPage);
+
+
+// メニュー開閉
+function SwitchMenu (command){
+    //var open = "";
+    //var close = "";
+
+    var menu = document.getElementById("bar-container");
+    //var button = document.getElementById("open-sp-menu");
+
+    function NemuClose() {
+        //console.log("Close!")
+        menu.classList.replace("show-menu", "hide-menu");
+        //button.textContent = open;
+    }
+
+    function MenuOpen() {
+        //console.log("Open!")
+        menu.classList.replace("hide-menu", "show-menu");
+        //button.textContent = close;
+    }
+
+    if (command){
+        if(command == "open"){
+            MenuOpen();
+            return;
+        }else if(command == "close"){
+            NemuClose();
+            return;
+        }
+    }
+    if(menu.classList.contains("show-menu")){
+        NemuClose();
+    }else if(menu.classList.contains("hide-menu")){
+        MenuOpen();
+    }else{
+        menu.classList.add("show-menu")
+    }
+
+
+
+}
+document.getElementById("open-sp-menu").addEventListener("click", SwitchMenu);
+document.getElementById("open-sp-menu").addEventListener("load", SwitchMenu);
+
+// スマホで開いたときにメニュー用の幅を確保する
+function SetSpMenu() {
+    // スマホCSSが適用されてる場合の処理
+    if (document.body.clientWidth < 799){
+        $("#beforemain").css({
+            paddingTop: $("header").outerHeight() + "px"
+        })
+        //$("#sidemenu-right").css({
+        //    paddingTop: $("header").outerHeight() + "px"
+        //})
+
+    }else{
+        $("#beforemain").css({
+            paddingTop: 0
+        })
+    }
+}
+window.addEventListener("load", SetSpMenu);
+window.addEventListener("resize", SetSpMenu);
+
+// ボタン以外の場所が押されたらボタンを閉じる
+window.addEventListener("load", function(){
+    document.body.addEventListener("click", (e) => {
+        if(! (e.target.closest("#header") || e.target.closest("#open-sp-menu") )&& document.getElementById("bar-container").classList.contains("show-menu") ){
+            SwitchMenu("close");
+        }
+    })
+})
diff --git a/buildmydist-2/script/main.js b/buildmydist-2/script/main.js
new file mode 100644 (file)
index 0000000..e7570e1
--- /dev/null
@@ -0,0 +1,22 @@
+window.addEventListener("load", function(){
+    var target = $("main, #sidemenu-right");
+    target.wrapAll("<div id=\"main-container\">")
+})
+
+// https://github.com/imgix/luminous
+// https://wemo.tech/1169
+var Enable_Luminous = false;
+
+window.addEventListener("load", function(){
+    if (Enable_Luminous == true){
+        Array.from(document.getElementsByTagName("img")).forEach(element =>{
+            element.outerHTML = `<a href="${element.src}" class="luminous">` + element.outerHTML + "</a>"
+        })
+
+        Array.from(document.getElementsByClassName("luminous")).forEach(element =>{
+            if( element !== null ) {
+                new Luminous(element);
+            }
+        })
+    }
+})
diff --git a/buildmydist-2/script/makeIndex.js b/buildmydist-2/script/makeIndex.js
new file mode 100644 (file)
index 0000000..18158e0
--- /dev/null
@@ -0,0 +1,63 @@
+// サイドバーに目次を表示する
+// 参考: https://www.marorika.com/entry/create-toc
+
+document.addEventListener('DOMContentLoaded', function () {
+    // 目次を追加する先(table of contents)
+    var contentsList = document.getElementById('index');
+
+    // 作成する目次のコンテナ要素
+    //var div = document.createElement('div');
+    var div = contentsList;
+
+    // main配下のh2、h3要素を全て取得する
+    var matches = document.querySelectorAll('main h2, main h3');
+
+    // 取得した見出しタグ要素の数だけ以下の操作を繰り返す
+    matches.forEach(function (value, i) {
+        // 見出しタグ要素のidを取得し空の場合は内容をidにする
+        var id = value.id;
+        if(id === '') {
+            id = value.textContent;
+            value.id = id;
+        }
+
+        // 要素がh2タグの場合
+        if(value.tagName === 'H2') {
+            var ul = document.createElement('ul');
+            var li = document.createElement('li');
+            var a = document.createElement('a');
+
+            // 追加する<ul><li><a>タイトル</a></li></ul>を準備する
+            a.innerHTML = value.textContent;
+            a.href = '#' + value.id;
+            li.appendChild(a)
+            ul.appendChild(li);
+
+            // コンテナ要素である<div>の中に要素を追加する
+            div.appendChild(ul);
+        }
+
+        // 要素がh3タグの場合
+        if(value.tagName === 'H3') {
+            var ul = document.createElement('ul');
+            var li = document.createElement('li');
+            var a = document.createElement('a');
+
+            // コンテナ要素である<div>の中から最後の<li>を取得する。
+            var lastUl = div.lastElementChild;
+            var lastLi = lastUl.lastElementChild;
+
+            // 追加する<ul><li><a>タイトル</a></li></ul>を準備する
+            a.innerHTML = value.textContent;
+            a.href = '#' + value.id;
+            li.appendChild(a)
+            ul.appendChild(li);
+
+            // 最後の<li>の中に要素を追加する
+            lastLi.appendChild(ul);
+        }
+    });
+
+    // 最後に画面にレンダリング
+    //contentsList.appendChild(div);
+});
diff --git a/buildmydist-2/script/scroll.js b/buildmydist-2/script/scroll.js
new file mode 100644 (file)
index 0000000..c465593
--- /dev/null
@@ -0,0 +1,11 @@
+ const SwitchScrollButton = () => {
+    var scroll_up_button = document.getElementById("scroll-up");
+    if (window.pageYOffset < 400){
+        scroll_up_button.style.display = "none";
+    }else{
+        scroll_up_button.style.display = "inline";
+    }
+ }
+
+ window.addEventListener("scroll", SwitchScrollButton)
+ window.addEventListener("load", SwitchScrollButton)
diff --git a/buildmydist-2/script/sidemenu.js.no b/buildmydist-2/script/sidemenu.js.no
new file mode 100644 (file)
index 0000000..3ba50fc
--- /dev/null
@@ -0,0 +1,28 @@
+// 参考: https://into-the-program.com/sidebar-follow-to-scrolling/
+$(window).on('load', function () {
+    var adjust = 0; //スクロール時のトップ位置調整用(問題なければ0)
+    var sidebar = $('#sidemenu-right'); //サイドバーを指定
+    var wrap = $('#main-container'); //ラッパーを指定
+    
+    var adjustTop = 0;
+    var sidebarTop = parseInt(sidebar.css('top'));
+    var sidebarMax = wrap.height() + adjust - sidebar.height();
+    
+    $(window).on('scroll', function () {
+        
+        var h = sidebarTop + $(window).scrollTop();
+        
+        if (h < sidebarMax) {
+            
+            if($(window).scrollTop() < adjust) {
+                adjustTop = 0;
+            } else {
+                adjustTop = adjust;
+            }
+            var offset = sidebarTop-adjustTop + $(window).scrollTop() + 'px';
+            sidebar.animate({top: offset},{duration:0, queue: false});
+            //sidebar.css({top: offset});
+
+        }
+    });
+});
diff --git a/buildmydist-2/style/common.css b/buildmydist-2/style/common.css
new file mode 100644 (file)
index 0000000..2b09670
--- /dev/null
@@ -0,0 +1,236 @@
+/* === ここからメニューバー === */
+header{
+    /* 横幅を画面いっぱいにする */
+    width: 100%;
+
+    /* 背景色 */
+    background-color: var(--blue-1);
+}
+
+.bar-item-left, .bar-logo{
+    text-align: center;
+    list-style: none;
+
+    /* マウスの形状を変える*/
+    cursor: pointer;
+
+    /* 左右に空白を作る */
+    padding-left: 0.1%;
+    padding-right: 0.1%;
+
+
+    /* 選択を無効化 */
+    user-select: none;
+}
+
+.bar-item-left > a, .bar-logo > a{
+    color: var(--main-white);
+    text-decoration: none;
+}
+
+.bar-item-left a{
+    display: block;
+}
+
+/* クリックされたときの色 */
+.bar-item-left:active, .bar-logo:active{
+    /* 文字色を設定 */
+    background-color: var(--old-red-1) !important;
+
+    /* 選択を無効化 */
+    user-select: none;
+}
+
+
+/* 現在選択されているディストロ */
+.currentdistro{
+    background-color: var(--skyblue-1);
+}
+/* === ここまでメニューバー === */
+
+
+
+/* === ここから本文 === */
+main h3{
+    background-color: var(--gray-2);
+    color: whitesmoke;
+
+    margin-top: 15px;
+    margin-bottom: 15px;
+}
+
+main h3::before{
+    content: '・';
+    display: inline-block;
+    width: 1em;
+    text-indent: 0;
+    font-size: larger;
+}
+
+main h4{
+    display: inline-block;
+    font-weight: 900;
+    
+    --main-h4-margin: 18px;
+    margin-top: var(--main-h4-margin);
+    margin-bottom: var(--main-h4-margin);
+}
+
+main h4::before{
+    content: ">> ";
+}
+
+main h4::after{
+    content: " <<";
+}
+
+main a:hover, #sidemenu-right a:hover{
+    text-decoration: wavy;
+}
+
+main a:visited, #sidemenu-right a:visited{
+    color: var(--pink-1);
+}
+
+
+
+/* === ここまで本文 === */
+
+
+
+/* === ここから全体 === */
+html{
+    /* 背景色 */
+    background-color: var(--black-1);
+
+    /* 文字色 */
+    color: var(--white-1);
+}
+body{
+    min-height: 100vh;
+}
+
+a{
+    text-decoration: none;
+    color: var(--pink-1);
+}
+
+/* === ここまで全体 === */
+
+
+
+/* === ここからフッター === */
+footer{
+    color: var(--white-1);
+    background-color: var(--blue-1);
+    width: 100%;
+    padding-top: 0.3%;
+    padding-bottom: 0.3%;
+
+    position: fixed;
+    bottom: 0;
+}
+#counter > img{
+    margin-left: auto;
+}
+#scroll-up{
+    display: none;
+}
+/* === ここまでフッター === */
+
+
+/* === ここから目次 === */
+#index li{
+    list-style: none;
+
+}
+
+#index ul{
+    padding-left: 10px;
+}
+#index a{
+    text-decoration: none;
+}
+
+/* === ここまで目次 === */
+
+/* === ここから関連ページ === */
+/*
+#relation_page a{
+    text-decoration: none;
+    color: blue;
+}*/
+/* === ここまで関連ページ === */
+
+/* ここから画像 */
+main img{
+    width: 50%;
+    display: inline-block;
+    margin-right: auto;
+}
+/* ここまで画像 */
+
+/* ここから警告 */
+.box-warning {
+    position: relative;
+    border: 3px double #da4033;
+    border-radius: 5px;
+    margin: 20px 0;
+    padding: 20px 20px 5px 20px;
+}
+.box-warning::before {
+    content: "警告";
+    position: absolute;
+    background-color: var(--black-1); 
+    color: #da4033;
+    font-weight: bold;
+    left: 20px;
+    top: -23px;
+    padding: 10px;
+}
+/* ここまで警告 */
+
+/* === ここからサイドメニュー === */
+#sidemenu-right{
+    /* 線を描写 */
+    /* border: solid 1px black; */
+    box-sizing: border-box;
+
+    /* 余白設定 */
+    padding-left: 1%;
+    padding-right: 1%;
+    margin-top: 1%;
+    /* margin-right: 4%; */
+    margin-bottom: 1%;
+
+}
+
+/* サイドメニューのスクロールバーを隠す */
+#sidemenu-right{
+    /* IE, Edge 対応 */
+    -ms-overflow-style: none;
+    /* Firefox 対応 */
+    scrollbar-width: none;
+}
+
+#sidemenu-right::-webkit-scrollbar {
+    display:none;
+}
+
+#sidemenu-right h2{
+    text-align: center;
+}
+
+
+#link-collection ul, #relation_page ul{
+    list-style:none;
+    padding-left: 10px;
+}
+/*
+#link-collection a{
+    color: blue;
+    text-decoration: none;
+}*/
+
+
+/* === ここまでサイドメニュー === */
\ No newline at end of file
diff --git a/buildmydist-2/style/pc.css b/buildmydist-2/style/pc.css
new file mode 100644 (file)
index 0000000..4c8cf5c
--- /dev/null
@@ -0,0 +1,189 @@
+/* === ここからメニューバー === */
+#bar-container{
+    /* 
+    flexboxでいい感じに配置する
+    参考サイト
+    https://guillemot.jp/web/365
+    https://knowledge.cpi.ad.jp/tech/169/
+    */
+
+    display: flex;
+    justify-content: space-between;
+
+    /* 回り込み解除 */
+    clear: both;
+
+    /* 余白設定 */
+    padding-top: 0.3%;
+    padding-bottom: 0.3%;
+    padding-left: 0;
+    /*padding-right: 5%;*/
+    margin-top: 1%;
+    margin-bottom: 0;
+    margin-left: 0;
+    margin-right: 0;
+
+    /*高さ*/
+    height: 50px;
+    line-height: 45px;
+}
+
+li.bar-item-left{
+    width: 100%;
+}
+
+
+.bar-logo{
+    font-size: larger;
+    font-weight: 900;
+    float: left;
+    margin-right: 2%;
+}
+
+
+.description, .bar-logo{
+    padding: 0.5%;
+}
+
+/* スマホ用ボタンを隠す */
+#open-sp-menu{
+    display: none;
+}
+
+/*
+#header{
+    position: fixed;
+    top: 0;
+    z-index: 1000;
+    height: 11%;
+}
+*/
+
+
+.bar-item-left:hover{
+    background-color: var(--skyblue-2);
+    color: black;
+}
+
+/* === ここまでメニューバー === */
+
+
+/* === ここから本文 === */
+main{
+    /* メインコンテンツの横の余白 */
+    padding-left: 1%;
+    padding-right: 1%;
+    margin-left: 4%;
+    margin-right: 1%;
+    margin-top: 1%;
+    margin-bottom: 1%;
+}
+main p{
+    line-height: 2;
+    margin-bottom: 1em;
+}
+
+/* h2のスタイル */
+
+h2 {
+    position: relative;
+    padding: 1rem .5rem;
+    margin-bottom: 1em;
+  }
+  
+h2:after {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 6px;
+    content: '';
+    border-radius: 3px;
+    /*background-image: linear-gradient(to left, #2af598 0%, #009efd 100%); */
+    background-color: var(--skyblue-1);
+}
+/* === ここまで本文 === */
+
+
+/* === ここからサイドメニュー === */
+main{
+    width: 65%;
+    /*  border: solid 1px black; */
+}
+
+#sidemenu-right{
+    /* 横幅設定 */
+    width: 25%;
+
+    /* 線を描写 */
+    /* border: solid 1px black; */
+    box-sizing: border-box;
+
+    /* 余白設定 */
+    padding-left: 1%;
+    padding-right: 1%;
+    margin-top: 1%;
+    /* margin-right: 4%; */
+    margin-bottom: 1%;
+
+    /* 固定 */
+    position: absolute;
+    right: 0;
+
+    /* スクロール */
+    overflow: scroll;
+}
+
+/* サイドメニューのスクロールバーを隠す */
+#sidemenu-right{
+    /* IE, Edge 対応 */
+    -ms-overflow-style: none;
+    /* Firefox 対応 */
+    scrollbar-width: none;
+}
+
+#sidemenu-right::-webkit-scrollbar {
+    display:none;
+}
+
+#sidemenu-right h2{
+    text-align: center;
+}
+
+#main-container{
+    display: flex;
+    margin: 0 auto;
+    position: relative;
+}
+
+#link-collection ul, #relation_page ul{
+    list-style:none;
+    padding-left: 10px;
+}
+
+#about-hayao img{
+    margin: 0 auto;
+    text-align: center;
+    width: 50%;
+}
+
+#hayao-icon{
+    margin-bottom: 4%;
+}
+/* === ここまでサイドメニュー === */
+
+
+/* === ここから上にスクロール ボタン */
+#scroll-up{
+    position: fixed;
+    bottom: 0;
+    right: 24%;
+    background-color: var(--blue-1);
+    color: var(--white-1);
+    line-height: 50px;
+    padding-left: 1%;
+    padding-right: 1%;
+    text-align: center;
+    cursor: pointer;
+}
+/* === ここまで上にスクロール ボタン */
diff --git a/buildmydist-2/style/print.css b/buildmydist-2/style/print.css
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/buildmydist-2/style/sp.css b/buildmydist-2/style/sp.css
new file mode 100644 (file)
index 0000000..145e241
--- /dev/null
@@ -0,0 +1,113 @@
+/* === ここからメニューバー === */
+.bar-logo{
+    font-size: medium;
+    font-weight: 600;
+}
+
+.description{
+    font-size: small;
+    text-align: center;
+}
+
+#bar-container{
+    justify-content: space-between;
+
+    /* 回り込み解除 */
+    clear: both;
+
+    text-align: center;
+
+    width: 100%;
+    padding-left: 0;
+
+    /* 初期状態で消す */
+    display: none;
+}
+
+.hide-menu{
+    display: none !important;
+}
+
+.show-menu{
+    display: inline-block !important;
+}
+
+#header{
+    position: fixed;
+    top: 0;
+    z-index: 1000;
+}
+
+#open-sp-menu{
+    display: block;
+    padding-top: 1%;
+    padding-left: 1%;
+    z-index: 1100;
+    color: white;
+}
+/* === ここまでメニューバー === */
+
+
+/* === ここからサイドメニュー === */
+#about-hayao img{
+    margin: 0 auto;
+    text-align: center;
+    width: 20%;
+    float: left;
+    margin-top: 20px;
+    margin-right: 20px;
+}
+
+#hayao-icon{
+    margin-bottom: 4%;
+}
+
+#link-collection ul{
+    display: flex;
+}
+
+#link-collection li{
+    margin-right: 20px;
+}
+
+#sidemenu-right{
+    /* border-top: solid 6px var(--old-black-1); */
+}
+/* === ここまでサイドメニュー === */
+
+
+/* === ここから本文 === */
+main{
+    /* メインコンテンツの横の余白 */
+    padding-left: 1%;
+    padding-right: 1%;
+    margin: 1%;
+}
+
+main p{
+    line-height: 1.9;
+    margin-bottom: 1em;
+}
+
+h2 {
+    position: relative;
+    padding: 1rem .5rem;
+    z-index: 0;
+  }
+  
+h2:after {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 6px;
+    content: '';
+    border-radius: 3px;
+    /*background-image: linear-gradient(to left, #2af598 0%, #009efd 100%); */
+    background-color: var(--skyblue-1);
+}
+/* === ここまで本文 === */
+
+
+/* === ここからフッター === */
+/* === ここまでフッター === */
diff --git a/buildmydist-2/style/var.css b/buildmydist-2/style/var.css
new file mode 100644 (file)
index 0000000..76d9229
--- /dev/null
@@ -0,0 +1,16 @@
+:root {
+    --old-red-1: #e74c3c;
+    --old-black-1: #2c3e50;
+    --old-black-2: #576574;
+    --old-white-1: #ecf0f1;
+    --old-green-1: #1abc9c;
+
+    --gray-1: #191919;
+    --gray-2: #1d1d1d;
+    --black-1: #111111;
+    --blue-1: #1b2538;
+    --skyblue-1: #1b73b1;
+    --skyblue-2: #54bebb;
+    --white-1: #fbffee;
+    --pink-1: #e84393;
+}
diff --git a/buildmydist/README.md b/buildmydist/README.md
new file mode 100644 (file)
index 0000000..65f0888
--- /dev/null
@@ -0,0 +1,3 @@
+BuildMyDist
+===============
+http://serenelinux.php.xdomain.jp/ のデータ
diff --git a/buildmydist/code/highlight.pack.js b/buildmydist/code/highlight.pack.js
new file mode 100644 (file)
index 0000000..cb5bed9
--- /dev/null
@@ -0,0 +1,2 @@
+/*! highlight.js v9.15.6 | BSD3 License | git.io/hljslicense */
+!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(a){var E=[],u=Object.keys,N={},g={},n=/^(no-?highlight|plain|text)$/i,R=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",relevance:"r",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},b="</span>",h={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function _(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function d(e){return e.nodeName.toLowerCase()}function v(e,n){var t=e&&e.exec(n);return t&&0===t.index}function p(e){return n.test(e)}function l(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function M(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),d(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function i(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(i)}}function m(c){function s(e){return e&&e.source||e}function o(e,n){return new RegExp(s(e),"m"+(c.cI?"i":"")+(n?"g":""))}!function n(t,e){if(!t.compiled){if(t.compiled=!0,t.k=t.k||t.bK,t.k){var r={},a=function(t,e){c.cI&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n=e.split("|");r[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof t.k?a("keyword",t.k):u(t.k).forEach(function(e){a(e,t.k[e])}),t.k=r}t.lR=o(t.l||/\w+/,!0),e&&(t.bK&&(t.b="\\b("+t.bK.split(" ").join("|")+")\\b"),t.b||(t.b=/\B|\b/),t.bR=o(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\B|\b/),t.e&&(t.eR=o(t.e)),t.tE=s(t.e)||"",t.eW&&e.tE&&(t.tE+=(t.e?"|":"")+e.tE)),t.i&&(t.iR=o(t.i)),null==t.r&&(t.r=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return(n="self"===e?t:e).v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return l(n,{v:null},e)})),n.cached_variants||n.eW&&[l(n)]||[n];var n})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e);var i=t.c.map(function(e){return e.bK?"\\.?(?:"+e.b+")\\.?":e.b}).concat([t.tE,t.i]).map(s).filter(Boolean);t.t=i.length?o(function(e,n){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i<e.length;i++){var c=r,o=s(e[i]);for(0<i&&(a+=n);0<o.length;){var u=t.exec(o);if(null==u){a+=o;break}a+=o.substring(0,u.index),o=o.substring(u.index+u[0].length),"\\"==u[0][0]&&u[1]?a+="\\"+String(Number(u[1])+c):(a+=u[0],"("==u[0]&&r++)}}return a}(i,"|"),!0):{exec:function(){return null}}}}(c)}function C(e,n,o,t){function u(e,n,t,r){var a='<span class="'+(r?"":h.classPrefix);return(a+=e+'">')+n+(t?"":b)}function s(){g+=null!=E.sL?function(){var e="string"==typeof E.sL;if(e&&!N[E.sL])return _(R);var n=e?C(E.sL,R,!0,i[E.sL]):O(R,E.sL.length?E.sL:void 0);return 0<E.r&&(d+=n.r),e&&(i[E.sL]=n.top),u(n.language,n.value,!1,!0)}():function(){var e,n,t,r,a,i,c;if(!E.k)return _(R);for(r="",n=0,E.lR.lastIndex=0,t=E.lR.exec(R);t;)r+=_(R.substring(n,t.index)),a=E,i=t,c=f.cI?i[0].toLowerCase():i[0],(e=a.k.hasOwnProperty(c)&&a.k[c])?(d+=e[1],r+=u(e[0],_(t[0]))):r+=_(t[0]),n=E.lR.lastIndex,t=E.lR.exec(R);return r+_(R.substr(n))}(),R=""}function l(e){g+=e.cN?u(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function r(e,n){if(R+=e,null==n)return s(),0;var t=function(e,n){var t,r,a;for(t=0,r=n.c.length;t<r;t++)if(v(n.c[t].bR,e))return n.c[t].endSameAsBegin&&(n.c[t].eR=(a=n.c[t].bR.exec(e)[0],new RegExp(a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m"))),n.c[t]}(n,E);if(t)return t.skip?R+=n:(t.eB&&(R+=n),s(),t.rB||t.eB||(R=n)),l(t),t.rB?0:n.length;var r,a,i=function e(n,t){if(v(n.eR,t)){for(;n.endsParent&&n.parent;)n=n.parent;return n}if(n.eW)return e(n.parent,t)}(E,n);if(i){var c=E;for(c.skip?R+=n:(c.rE||c.eE||(R+=n),s(),c.eE&&(R=n));E.cN&&(g+=b),E.skip||E.sL||(d+=E.r),(E=E.parent)!==i.parent;);return i.starts&&(i.endSameAsBegin&&(i.starts.eR=i.eR),l(i.starts)),c.rE?0:n.length}if(r=n,a=E,!o&&v(a.iR,r))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return R+=n,n.length||1}var f=S(e);if(!f)throw new Error('Unknown language: "'+e+'"');m(f);var a,E=t||f,i={},g="";for(a=E;a!==f;a=a.parent)a.cN&&(g=u(a.cN,"",!0)+g);var R="",d=0;try{for(var c,p,M=0;E.t.lastIndex=M,c=E.t.exec(n);)p=r(n.substring(M,c.index),c[0]),M=c.index+p;for(r(n.substr(M)),a=E;a.parent;a=a.parent)a.cN&&(g+=b);return{r:d,value:g,language:e,top:E}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:_(n)};throw e}}function O(t,e){e=e||h.languages||u(N);var r={r:0,value:_(t)},a=r;return e.filter(S).filter(s).forEach(function(e){var n=C(e,t,!1);n.language=e,n.r>a.r&&(a=n),n.r>r.r&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function B(e){return h.tabReplace||h.useBR?e.replace(t,function(e,n){return h.useBR&&"\n"===e?"<br>":h.tabReplace?n.replace(/\t/g,h.tabReplace):""}):e}function c(e){var n,t,r,a,i,c,o,u,s,l,f=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=R.exec(i))return S(t[1])?t[1]:"no-highlight";for(n=0,r=(i=i.split(/\s+/)).length;n<r;n++)if(p(a=i[n])||S(a))return a}(e);p(f)||(h.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):n=e,i=n.textContent,r=f?C(f,i,!0):O(i),(t=M(n)).length&&((a=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=r.value,r.value=function(e,n,t){var r=0,a="",i=[];function c(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function o(e){a+="<"+d(e)+E.map.call(e.attributes,function(e){return" "+e.nodeName+'="'+_(e.value).replace('"',"&quot;")+'"'}).join("")+">"}function u(e){a+="</"+d(e)+">"}function s(e){("start"===e.event?o:u)(e.node)}for(;e.length||n.length;){var l=c();if(a+=_(t.substring(r,l[0].offset)),r=l[0].offset,l===e){for(i.reverse().forEach(u);s(l.splice(0,1)[0]),(l=c())===e&&l.length&&l[0].offset===r;);i.reverse().forEach(o)}else"start"===l[0].event?i.push(l[0].node):i.pop(),s(l.splice(0,1)[0])}return a+_(t.substr(r))}(t,M(a),i)),r.value=B(r.value),e.innerHTML=r.value,e.className=(c=e.className,o=f,u=r.language,s=o?g[o]:u,l=[c.trim()],c.match(/\bhljs\b/)||l.push("hljs"),-1===c.indexOf(s)&&l.push(s),l.join(" ").trim()),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function o(){if(!o.called){o.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,c)}}function S(e){return e=(e||"").toLowerCase(),N[e]||N[g[e]]}function s(e){var n=S(e);return n&&!n.disableAutodetect}return a.highlight=C,a.highlightAuto=O,a.fixMarkup=B,a.highlightBlock=c,a.configure=function(e){h=l(h,e)},a.initHighlighting=o,a.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",o,!1),addEventListener("load",o,!1)},a.registerLanguage=function(n,e){var t=N[n]=e(a);i(t),t.aliases&&t.aliases.forEach(function(e){g[e]=n})},a.listLanguages=function(){return u(N)},a.getLanguage=S,a.autoDetection=s,a.inherit=l,a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",r:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,r:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,r:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,r:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,r:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,r:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,r:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,r:0},a});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("objectivec",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,_="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},l:t,i:"</",c:[{cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"meta",b:"#",e:"$",c:[{cN:"meta-string",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+_.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:_,l:t,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a=e.inherit(t,{i:/\n/}),c={cN:"subst",b:"{",e:"}",k:i},n=e.inherit(c,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,n]},b={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},c]},l=e.inherit(b,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},n]});c.c=[b,s,t,e.ASM,e.QSM,r,e.CBCM],n.c=[l,s,a,e.ASM,e.QSM,r,e.inherit(e.CBCM,{i:/\n/})];var o={v:[b,s,t,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"\x3c!--|--\x3e"},{b:"</?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,r,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[o,r,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%<?\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},t={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,{cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},t]}});hljs.registerLanguage("properties",function(r){var t="[ \\t\\f]*",e="("+t+"[:=]"+t+"|[ \\t\\f]+)",s="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",n="([^\\\\:= \\t\\f\\n]|\\\\.)+",a={e:e,r:0,starts:{cN:"string",e:/$/,r:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[r.C("^\\s*[!#]","$"),{b:s+e,rB:!0,c:[{cN:"attr",b:s,endsParent:!0,r:0}],starts:a},{b:n+e,rB:!0,r:0,c:[{cN:"meta",b:n,endsParent:!0,r:0}],starts:a},{cN:"attr",r:0,b:n+t+"$"}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"</?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s.c=o}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,c]},e.ASM,e.QSM]},i={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",b,i,a]};return c.c=[a,i,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,i,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("xml",function(s){var e={eW:!0,i:/</,r:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},s.inherit(s.ASM,{i:null,cN:null,c:null,skip:!0}),s.inherit(s.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[e],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[e],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},e]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[t.BE]},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e,{b:/\(/,e:/\)/,k:c,r:0,c:["self",t.CLCM,t.CBCM,r,s,e]}]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("css",function(e){var c={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,c]}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_\7f-ÿ][a-zA-Z0-9_\7f-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d;var l=[{b:/^\s*=>/,starts:{e:"$",c:i.c=d}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(l).concat(d)}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_\.-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.initHighlightingOnLoad() ;
\ No newline at end of file
diff --git a/buildmydist/code/vs2015.css b/buildmydist/code/vs2015.css
new file mode 100644 (file)
index 0000000..d1d9be3
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Visual Studio 2015 dark style
+ * Author: Nicolas LLOBERA <nllobera@gmail.com>
+ */
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  background: #1E1E1E;
+  color: #DCDCDC;
+}
+
+.hljs-keyword,
+.hljs-literal,
+.hljs-symbol,
+.hljs-name {
+  color: #569CD6;
+}
+.hljs-link {
+  color: #569CD6;
+  text-decoration: underline;
+}
+
+.hljs-built_in,
+.hljs-type {
+  color: #4EC9B0;
+}
+
+.hljs-number,
+.hljs-class {
+  color: #B8D7A3;
+}
+
+.hljs-string,
+.hljs-meta-string {
+  color: #D69D85;
+}
+
+.hljs-regexp,
+.hljs-template-tag {
+  color: #9A5334;
+}
+
+.hljs-subst,
+.hljs-function,
+.hljs-title,
+.hljs-params,
+.hljs-formula {
+  color: #DCDCDC;
+}
+
+.hljs-comment,
+.hljs-quote {
+  color: #57A64A;
+  font-style: italic;
+}
+
+.hljs-doctag {
+  color: #608B4E;
+}
+
+.hljs-meta,
+.hljs-meta-keyword,
+.hljs-tag {
+  color: #9B9B9B;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+  color: #BD63C5;
+}
+
+.hljs-attr,
+.hljs-attribute,
+.hljs-builtin-name {
+  color: #9CDCFE;
+}
+
+.hljs-section {
+  color: gold;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}
+
+/*.hljs-code {
+  font-family:'Monospace';
+}*/
+
+.hljs-bullet,
+.hljs-selector-tag,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #D7BA7D;
+}
+
+.hljs-addition {
+  background-color: #144212;
+  display: inline-block;
+  width: 100%;
+}
+
+.hljs-deletion {
+  background-color: #600;
+  display: inline-block;
+  width: 100%;
+}
diff --git a/buildmydist/favicon.ico b/buildmydist/favicon.ico
new file mode 100644 (file)
index 0000000..e48ef04
Binary files /dev/null and b/buildmydist/favicon.ico differ
diff --git a/buildmydist/favicon_old.ico b/buildmydist/favicon_old.ico
new file mode 100644 (file)
index 0000000..dfdf039
Binary files /dev/null and b/buildmydist/favicon_old.ico differ
diff --git a/buildmydist/images/basix_grub.PNG b/buildmydist/images/basix_grub.PNG
new file mode 100644 (file)
index 0000000..e5cd757
Binary files /dev/null and b/buildmydist/images/basix_grub.PNG differ
diff --git a/buildmydist/images/basix_install1.PNG b/buildmydist/images/basix_install1.PNG
new file mode 100644 (file)
index 0000000..9f2d91c
Binary files /dev/null and b/buildmydist/images/basix_install1.PNG differ
diff --git a/buildmydist/images/basix_install2.PNG b/buildmydist/images/basix_install2.PNG
new file mode 100644 (file)
index 0000000..965ccc1
Binary files /dev/null and b/buildmydist/images/basix_install2.PNG differ
diff --git a/buildmydist/images/basix_install3.PNG b/buildmydist/images/basix_install3.PNG
new file mode 100644 (file)
index 0000000..c9da77d
Binary files /dev/null and b/buildmydist/images/basix_install3.PNG differ
diff --git a/buildmydist/images/basix_install_done.PNG b/buildmydist/images/basix_install_done.PNG
new file mode 100644 (file)
index 0000000..93f9eb8
Binary files /dev/null and b/buildmydist/images/basix_install_done.PNG differ
diff --git a/buildmydist/images/basix_installicon.PNG b/buildmydist/images/basix_installicon.PNG
new file mode 100644 (file)
index 0000000..489f805
Binary files /dev/null and b/buildmydist/images/basix_installicon.PNG differ
diff --git a/buildmydist/images/bodhibuilder1.PNG b/buildmydist/images/bodhibuilder1.PNG
new file mode 100644 (file)
index 0000000..9cf5f7d
Binary files /dev/null and b/buildmydist/images/bodhibuilder1.PNG differ
diff --git a/buildmydist/images/leafpad_bodhibuilder.PNG b/buildmydist/images/leafpad_bodhibuilder.PNG
new file mode 100644 (file)
index 0000000..8493469
Binary files /dev/null and b/buildmydist/images/leafpad_bodhibuilder.PNG differ
diff --git a/buildmydist/images/leafpad_linenumber.PNG b/buildmydist/images/leafpad_linenumber.PNG
new file mode 100644 (file)
index 0000000..51f6979
Binary files /dev/null and b/buildmydist/images/leafpad_linenumber.PNG differ
diff --git a/buildmydist/images/virtualbox_done.PNG b/buildmydist/images/virtualbox_done.PNG
new file mode 100644 (file)
index 0000000..f7c4423
Binary files /dev/null and b/buildmydist/images/virtualbox_done.PNG differ
diff --git a/buildmydist/images/virtualbox_download_1.PNG b/buildmydist/images/virtualbox_download_1.PNG
new file mode 100644 (file)
index 0000000..a79cf11
Binary files /dev/null and b/buildmydist/images/virtualbox_download_1.PNG differ
diff --git a/buildmydist/images/virtualbox_download_2.PNG b/buildmydist/images/virtualbox_download_2.PNG
new file mode 100644 (file)
index 0000000..e893c36
Binary files /dev/null and b/buildmydist/images/virtualbox_download_2.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine1.PNG b/buildmydist/images/virtualbox_newmachine1.PNG
new file mode 100644 (file)
index 0000000..8c7d27c
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine1.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine2.PNG b/buildmydist/images/virtualbox_newmachine2.PNG
new file mode 100644 (file)
index 0000000..85ef49f
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine2.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine3.PNG b/buildmydist/images/virtualbox_newmachine3.PNG
new file mode 100644 (file)
index 0000000..9646cdb
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine3.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine4.PNG b/buildmydist/images/virtualbox_newmachine4.PNG
new file mode 100644 (file)
index 0000000..a68afe0
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine4.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine5.PNG b/buildmydist/images/virtualbox_newmachine5.PNG
new file mode 100644 (file)
index 0000000..b5d6a7a
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine5.PNG differ
diff --git a/buildmydist/images/virtualbox_newmachine6.PNG b/buildmydist/images/virtualbox_newmachine6.PNG
new file mode 100644 (file)
index 0000000..b438053
Binary files /dev/null and b/buildmydist/images/virtualbox_newmachine6.PNG differ
diff --git a/buildmydist/images/virtualbox_setting1.PNG b/buildmydist/images/virtualbox_setting1.PNG
new file mode 100644 (file)
index 0000000..271a177
Binary files /dev/null and b/buildmydist/images/virtualbox_setting1.PNG differ
diff --git a/buildmydist/images/virtualbox_setting2.PNG b/buildmydist/images/virtualbox_setting2.PNG
new file mode 100644 (file)
index 0000000..0fc4149
Binary files /dev/null and b/buildmydist/images/virtualbox_setting2.PNG differ
diff --git a/buildmydist/images/virtualbox_setting3.PNG b/buildmydist/images/virtualbox_setting3.PNG
new file mode 100644 (file)
index 0000000..9fe784b
Binary files /dev/null and b/buildmydist/images/virtualbox_setting3.PNG differ
diff --git a/buildmydist/index.html b/buildmydist/index.html
new file mode 100644 (file)
index 0000000..22804c3
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~トップページ~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      BodhiBuilderにあるバグの修正方法を解説しているのはここだけ!
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="style/main.css" media="screen and (min-width: 800px)">
+    <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js">
+    </script>
+    <link rel="shortcut icon" href="favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="/style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう トップページ</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a class="active" href="index.html">トップページ</a></li>
+          <li><a href="page/preparation.html">準備編</a></li>
+          <li><a href="page/customize.html">カスタマイズ編</a></li>
+          <li><a href="page/makeiso.html">ISO作成編</a></li>
+          <li><a href="page/distribution.html">配布編</a></li>
+          <li class="right"><a href="page/about.html">About</a></li>
+          <li class="right"><a href="page/website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+
+
+
+    <main>
+      
+      <h2>
+        警告
+      </h2>
+      <p>
+        このサイトの情報は非常に古く、作者はこれ以上更新する気がありません。
+      </p>
+      <p>
+        <a href="http://hayao.fascode.net/buildmydist-2/">新しいサイトとサーバ、URL</a>で1から作り直しているのでそちらを参照してください。
+        <p>以下にかかれている情報は非常に古いものです。十分注意してください。<br>
+          また、このサイトの情報はUbuntu 18.04LTSまででしか使用できないので注意してください。</p>
+      </p>
+      <h2>
+        このサイトについて
+      </h2>
+      <p>
+        このサイトでは、Ubuntu派生のOSの作り方を一から解説しています
+      </p>
+      <p>
+        日本語の情報は非常に少ないので参考になれば幸いです
+      </p>
+      <p>
+        くわしくは
+        <a href="page/about.html">
+          こちら
+        </a>
+        を御覧ください
+      </p>
+      <!--
+      <h2>
+        問い合わせ
+      </h2>
+      <p>
+        <a href="page/form.html">フォーム</a>をご用意いたしましたので、そちらからお願いします
+      </p>
+      -->
+      <h2>
+        SereneLinuxとは
+      </h2>
+      <p>
+        現在筆者が開発中のUbuntu派生の軽量OSです
+      </p>
+      <p>
+        初心者にも使いやすく、美しいUIで作成しているので誰でも使うことができます
+      </p>
+      <p>
+        UIがmacっぽいのは気のせいです
+      </p>
+      <p>
+        <a href="serenelinux.xyz">公式サイト</a>からダウンロードできます
+      </p>
+      <p>
+        (2019/04/03現在)Beta版なので利用は自己責任でお願いします
+      </p>
+      <h2>
+        筆者について
+      </h2>
+      <p>
+        ただの中学生です
+      </p>
+      <p>
+        <a href="https://twitter.com/Hayao0819/">Twitterアカウント</a>をフォローしてくれると僕が喜びます
+      </p>
+      <p>
+        なにかあればDMもしくはフォームに来てください
+      </p>
+      <h2>
+        逮捕される
+      </h2>
+      <p>
+        下に書いてあるリンクを貼ると逮捕されるらしいので貼ってみます
+      </p>
+      <p>
+        兵庫県警の方見てますか~!!
+      </p>
+      <p>
+        <a href="https://github.com/hamukazu/lets-get-arrested" target="_blank">https://sudosan.github.io/lets-get-arrested/</a>
+      </p>
+      <h2>
+        実際にディストリビューションを作る
+      </h2>
+      <p>
+        まずは環境構築から!
+      </p>
+      <h3 class="goto">
+        <a href="./page/preparation.html">準備編へ行く</a>
+      </h3>
+
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/about.html b/buildmydist/page/about.html
new file mode 100644 (file)
index 0000000..be7708f
--- /dev/null
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      このサイトに関する情報を書いている場所です。
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a class="active" href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+
+      <h2>
+        このサイトの概要的なやつ
+      </h2>
+      <p>
+        SereneLinuxの開発者が、SereneLinux開発中に困ったことを中心に初心者にわかりやすいように書いていくサイトです。
+      </p>
+      <p>
+        CMSとかはあまり好きじゃないのでHTMLとCSSの手打ちで作ってます。
+      </p>
+      <p>
+        JavaScriptは使っていないと胸を張って言いたいですが、コードの色付けに使用しています。
+      </p>
+      <h2>
+        お問い合わせ
+      </h2>
+      <p>
+        わからないことやご意見等があございましたら、メールフォームまでお願いします
+      </p>
+      <p>
+        <a href="page/form.html">メールフォームへ行く</a>
+      </p>
+      <h2>
+        SereneLinuxってなんぞや
+      </h2>
+      <p>
+        現在開発されているBasix派生のディストリビューションです。
+      </p>
+      <p>
+        このサイトの方法で開発されており、Xfce4を採用している軽量OSです。
+      </p>
+      <p>
+        現在はStandard版だけですが、今後はPro版やLite版もリリースしたいと考えています。
+      </p>
+      <p>
+        <a href="http://serenelinux.com">公式サイト</a>からBeta版のダウンロード、開発チームへの参加ができるのでぜひ試してみてください。
+      </p>
+      <!--
+        <h2>
+          TALLinuxについて
+        </h2>
+        <p>
+          SereneLinuxをベースにTALLinuxTeamが開発を行っているLinuxです。
+        </p>
+        <p>
+          軽量志向のSereneLinuxとは違い、KDEを搭載してリッチになっています。
+        </p>
+        <p>
+          Lxde版も作成したようでアンケートを行うようです。
+        </p>
+        <p>
+          Beta4から配布されており、現在
+          <a href="https://t.co/wV9HeJQa4O">
+            公式サイト
+          </a>
+          からダウンロードできるようです。
+        </p>
+        <p>
+          TALLinuxへの技術提供もSereneTeamが行っていますのでぜひ使ってみてください。
+        </p>
+        <h2>
+          NXLinuxについて
+        </h2>
+        <p>
+          Basixをベースに開発が行われているLinuxです。
+        </p>
+        <p>
+          筆者もNXLinuxの開発へ参加しています。
+        </p>
+        <p>
+          詳しくは後で追記します...
+        </p>
+      -->
+      <h2>
+        筆者について
+      </h2>
+      <p>
+        トップページと内容が一緒じゃねぇかボケェ って思った人いると思いますがもう少し詳しく自己紹介しようと思います。
+      </p>
+      <p>
+        SereneTeamの3人目のメンバーの@Hayao0819です。
+      </p>
+      <p>
+        SereneTeamでは、ファイルサーバ、BodhiBuilder、UI、Lite版を担当しています。
+      </p>
+      <p>
+        出身はド田舎代表のグンマー帝国です。
+      </p>
+
+      <h2>
+        このサイトを作った理由
+      </h2>
+      <p>
+        SereneLinuxの開発の際、BodhiBuilderの情報がものすごく少なかったのでこれからディストリビューションを作ろうと考えている人のために作りました
+      </p>
+      <p>
+        これからも随時更新していこうと思います。
+      </p>
+      <h2>
+        このサイトのサイトマップについて
+      </h2>
+      <p>
+        このサイトでは、サイトマップの作成を”サイトマップを作成-自動生成ツール「sitemap.xml Editor」”を用いて作成しています。
+      </p>
+      <p>
+        素晴らしいツールで非常に簡単です。作者さんありがとうございます。
+      </p>
+      <p>
+        こちら→
+        <a href="http://www.sitemapxml.jp/" target="_blank"><img src="http://www.sitemapxml.jp/img/sitemapxml.png" width="117" height="14"  alt="sitemap.xml自動生成ツール" /></a>
+      </p>
+
+      <h2>
+        更新履歴
+      </h2>
+      <p>
+        (iframeで埋め込んでいます。正常に表示されない場合は<a href="history.html">直接アクセス</a>してください)
+      </p>
+      <iframe src="history.html" class="history" width="100%" height="700">更新履歴</iframe>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/customize.html b/buildmydist/page/customize.html
new file mode 100644 (file)
index 0000000..30fc244
--- /dev/null
@@ -0,0 +1,996 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~カスタマイズ編~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      Ubuntuをカスタマイズして自分の好きなデザイン、操作にするカスタマイズを行うページです。
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう ~カスタマイズ編~</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a class="active" href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+      <h2>
+        カスタマイズしよう
+      </h2>
+      <p>
+        実際にBasixをカスタマイズしていきましょう。
+      </p>
+      <p>
+        基本的なカスタマイズは以下のとおりです
+      </p>
+      <p>
+        非常に長くなるので頑張って読んでください...
+      </p>
+      <p>
+        カスタマイズくらいできるわ!って人は9から読んでください
+      </p>
+      <p>
+        8以降はOS作成だけのカスタマイズなので知らない人もいるかもしれません
+      </p>
+      <h2>
+        目次
+      </h2>
+      <p>
+        <ol class="contents">
+          <li>
+            デスクトップ環境の選択
+          </li>
+          <li>
+            ディスプレイマネージャの選択
+          </li>
+          <li>
+            テーマのインストール、設定
+          </li>
+          <li>
+            アイコンのインストール、設定
+          </li>
+          <li>
+            マウスカーソルのインストール、設定
+          </li>
+          <li>
+            パッケージの削除
+          </li>
+          <li>
+            パッケージのインストール
+          </li>
+          <li>
+            デスクトップのカスタマイズ
+          </li>
+          <li>
+            設定ファイルの保存
+          </li>
+          <li>
+            インストールスライドの変更
+          </li>
+          <li>
+            インストーラーアイコンの変更
+          </li>
+          <li>
+            OS名の変更
+          </li>
+          <li>
+            Basix設定ファイルの削除
+          </li>
+        </ol>
+      </p>
+
+      <h2>
+        1.デスクトップ環境の選択
+      </h2>
+      <p>
+        まずはデスクトップ環境を決めます
+      </p>
+      <p>
+        デスクトップ環境を決める上で重要になるのが「ターゲットにするユーザー」です
+      </p>
+      <p>
+        準備編で決めたことがここで重要になってきます
+      </p>
+      <p>
+        以下にそれぞれのデスクトップ環境の特徴を書いていくので好きなものを選んでください
+      </p>
+      <p>
+        重くはなりますが、複数のデスクトップ環境を搭載することもできます
+      </p>
+      <div class="table">
+        <table>
+          <thead>
+            <tr>
+              <th>デスクトップ環境</th>
+              <th>標準ディストリビューション</th>
+              <th>特徴</th>
+              <th>重さ</th>
+            </tr>
+          </thead>
+          <tbody>
+
+
+            <tr>
+              <th>
+                Gnome3
+              </th>
+              <td label="標準ディストリビューション">
+                  Ubuntu
+              </td>
+              <td label="特徴">
+                <p>
+                  操作が独特
+                  <br>
+                  洗練されている
+                </p>
+              </td>
+              <td label="重さ">
+                  やや重い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                Xfce4
+              </th>
+              <td label="標準ディストリビューション">
+                  Xubuntu
+              </td>
+              <td label="特徴">
+                <p>
+                  標準のパネル設定はMac風になっている
+                  <br>
+                  細かいカスタマイズが可能
+                  <br>
+                  標準のテーマ、アイコンがダサい
+                </p>
+              </td>
+              <td label="重さ">
+                  軽い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                KDE
+              </th>
+              <td label="標準ディストリビューション">
+                Kubuntu
+              </td>
+              <td label="特徴">
+                <p>
+                  非常に高機能で、美しいUI
+                  <br>
+                  比較的カスタマイズしにくい
+                </p>
+              </td>
+              <td label="重さ">
+                Gnomeよりは軽い(かも)
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                Lxde
+              </th>
+              <td label="標準ディストリビューション">
+                Lubuntu
+                <br>
+                Basix
+              </td>
+              <td label="特徴">
+                <p>
+                  Windows風のUI
+                  <br>
+                  ものすごく軽量
+                  <br>
+                  標準のテーマ、アイコンが汚い
+                </p>
+              </td>
+              <td label="重さ">
+                最も軽い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                LxQt
+              </th>
+              <td label="標準ディストリビューション">
+                ---
+              </td>
+              <td label="特徴">
+                <p>
+                  Lxdeと非常に似ている
+                  <br>
+                  細かいカスタマイズが可能
+                  <br>
+                  標準のテーマ、アイコンがダサい
+                </p>
+              </td>
+              <td label="重さ">
+                最も軽い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                Unity
+              </th>
+              <td label="標準ディストリビューション">
+                  Ubuntu(17.10まで)
+              </td>
+              <td label="特徴">
+                <p>
+                  Ubuntu版のGnomeと似たUI
+                  <br>
+                  殆どカスタマイズできない
+                  <br>
+                  今後サポートされるか不明
+                </p>
+              </td>
+              <td label="重さ">
+                最も重い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                Cinnamon
+              </th>
+              <td label="標準ディストリビューション">
+                ---
+              </td>
+              <td label="特徴">
+                <p>
+                  Windows風のUI
+                  <br>
+                  あまりカスタマイズできない
+                  <br>
+                  高機能で美しい
+                </p>
+              </td>
+              <td label="重さ">
+                やや重い
+              </td>
+            </tr>
+
+            <tr>
+              <th>
+                Mate
+              </th>
+              <td label="標準ディストリビューション">
+                Ubuntu Mate
+              </td>
+              <td label="特徴">
+                <p>
+                  Windows風のUI
+                  <br>
+                  Gnome2(Ubuntu 10.10までのUI)からフォーク
+                  <br>
+                  シンプル
+                </p>
+              </td>
+              <td label="重さ">
+                やや軽い
+              </td>
+            </tr>
+
+            
+          </tbody>
+        </table>
+      </div>
+
+      <p>
+        おすすめはXfce4です
+      </p>
+      <p>
+        軽量でカスタマイズ性が高いので自由に改造することができます
+      </p>
+      <p>
+        SereneLinuxもXfce4をベースにしています
+      </p>
+      <p>
+        今回はXfce4を選んだとして関節を勧めていこうと思います
+      </p>
+
+
+
+      <h2>
+        2.ディスプレイマネージャの選択
+      </h2>
+      <p>
+        ディスプレイマネージャとは、いわゆるログイン画面です
+      </p>
+      <p>
+        以下の様なものがあります
+      </p>
+      <div class="table">
+        <table>
+          <thead>
+            <tr>
+              <th>ディスプレイマネージャ</th>
+              <th>標準ディストリビューション</th>
+              <th>特徴</th>
+              <th>重さ</th>
+            </tr>
+          </thead>
+          <tbody>
+
+
+            <tr>
+              <th>
+                GDM3
+              </th>
+              <td label="標準ディストリビューション">
+                  Ubuntu
+              </td>
+              <td label="特徴">
+                <p>
+                  Gnomeのディスプレイマネージャ
+                  <br>
+                  洗練されており、美しいUI
+                  <br>
+                  カスタマイズしにくい
+                </p>
+              </td>
+              <td label="重さ">
+                やや重い
+              </td>
+            </tr>
+
+
+            <tr>
+              <th>
+                LightDM
+              </th>
+              <td label="標準ディストリビューション">
+                  Xubuntu、Lubuntu、Ubuntu(17.10まで)
+              </td>
+              <td label="特徴">
+                <p>
+                  非常に軽い
+                  <br>
+                  カスタマイズが可能
+                  <br>
+                  標準のテーマ、アイコンがダサい
+                </p>
+              </td>
+              <td label="重さ">
+                軽い
+              </td>
+            </tr>
+
+            <tr>
+              <th>
+                KDM(開発停止)
+              </th>
+              <td label="標準ディストリビューション">
+                  Kubuntu(KDE4以下)
+              </td>
+              <td label="特徴">
+                <p>
+                  リッチなUI
+                  <br>
+                  KDEのディスプレイマネージャ
+                </p>
+              </td>
+              <td label="重さ">
+                ---
+              </td>
+            </tr>
+
+            <tr>
+              <th>
+                SDDM
+              </th>
+              <td label="標準ディストリビューション">
+                LxQt, KDE Plasma 5
+              </td>
+              <td label="特徴">
+                <p>
+                  Qtのみで書かれている
+                </p>
+              </td>
+              <td label="重さ">
+                ---
+              </td>
+            </tr>
+
+            
+          </tbody>
+        </table>
+      </div>
+
+      <p>
+        今回は最も一般的なLightDMを使用していきます
+      </p>
+      <p>
+        (筆者はLightDMとGDMしか使用したこと無いのでSDDMはわからないです)
+      </p>
+      <h3>
+        Greeterについて
+      </h3>
+      <p>
+        LightDMには「Greeter」と呼ばれるテーマを適用させる機能があります(他のDMにもあるのかな?)
+      </p>
+      <p>
+        SereneLinuxではUbuntu17.10まで使われていた「unity-greeter」を適用させています
+      </p>
+      <p>
+        この「Unity-Greeter」はインストール後に手動で設定をする必要があります
+      </p>
+      <p>
+        参考にしたのは以下のサイトです
+      </p>
+      <p>
+        <a href="https://cialu.net/how-to-solve-failed-to-start-session-with-lightdm-and-xfce/" target="_blank">How to solve ‘Failed to start session’ with LightDM and Xfce</a>
+      </p>
+      <p>
+        上のサイトと同じになってしまいますが、一応こちらでも解説しようと思います
+      </p>
+      <p>
+        <ol>
+          <li>
+            unity-greeterをインストールする
+          </li>
+          <p>
+            これがないと始まりませんね
+          </p>
+          <pre><code>$ sudo apt-get -y install unity-greeter</code></pre>
+          <li>
+            設定ファイルを削除する
+          </li>
+          <p>
+            以下のコマンドを実行して設定ファイルを削除します
+          </p>
+          <p>
+            <pre><code>$ sudo rm /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf</code></pre>
+          </p>
+          <li>
+            新しい設定ファイルを作成する
+          </li>
+          <p>
+            以下のコマンドを実行するだけです
+          </p>
+          <p>
+            <pre><code>$ sudo touch /usr/share/lightdm/lightdm.conf.d/50-xfce-greeter.conf</code></pre>
+          </p>
+          <li>
+            設定ファイルを記述する
+          </li>
+          <p>
+            nanoを起動します
+          </p>
+          <pre><code>$ sudo nano /usr/share/lightdm/lightdm.conf.d/50-xfce-greeter.conf</code></pre>
+          <p>
+            以下のコードを書き込んで「Ctrl + O」を押して保存し、「Ctrl + X」で終了します
+          </p>
+          <pre><code>[SeatDefaults]
+greeter-session=unity-greeter
+user-session=xfce</code></pre>
+          <li>
+            再起動します
+          </li>
+          <pre><code>$ sudo reboot</code></pre>
+
+        </ol>
+      </p>
+
+      <h2>
+        テーマのインストール、設定
+      </h2>
+      <h3>
+        自分の好きなテーマを探す
+      </h3>
+      <p>
+        自分の好きなテーマをネット上で探して自分のOSのデフォルトにしましょう
+      </p>
+      <p>
+        テーマのライセンスさえOKで、現在のGTK3に準拠しているテーマなら何でも適用できます
+      </p>
+      <p>
+        SereneLinuxでは「Numix」というテーマを採用しています
+      </p>
+      <p>
+        テーマによってディストリビューションの印象を大きく変えることになるので慎重にに選んでください
+      </p>
+      <p>
+        テーマは以下のサイトから探すと簡単に見つけることができます
+      </p>
+      <ul>
+        <li><a href="https://www.xfce-look.org/" target="_blank">Xfce-Look</a></li>
+        <li><a href="https://www.gnome-look.org/" target="_blank">Gnome-Look</a></li>
+      </ul>
+      <p>
+        GTK3のテーマをダウンロードしてください
+      </p>
+      <p>
+        自分の考えたユーザのターゲットに合ったテーマを選ぶといいでしょう
+      </p>
+      <p>ライセンスをよく読み、再配布が可能かどうかを確かめてください</p>
+      <h3>
+        アイコンのインストール、設定
+      </h3>
+      <p>
+        テーマを配置させます
+      </p>
+      <p>
+        ダウンロードしたテーマファイルを展開してください
+      </p>
+      <p>
+        Windowsで展開するといろいろと問題が起きる可能性があるので必ずLinux環境で展開を行ってください
+      </p>
+      <p>
+        展開したら、.themeの拡張子がついたファイルが入っているフォルダを以下のパスにRoot権限でコピーしてください
+      </p>
+      <p>
+        <pre><code>/usr/share/themes</code></pre>
+      </p>
+      <p>
+        コピーしたら設定から自分のテーマを設定します
+      </p>
+      <h2>アイコンの設定</h2>
+      <p>テーマと同じサイトでアイコンを探し、ディレクトリにコピーするだけです</p>
+      <p><pre><code>/usr/share/icons</code></pre></p>
+      <p>
+        (解説超手抜きです すみません もしかしたら細かく書くかもです)
+      </p>
+      <h2>
+        マウスカーソルのインストール、設定
+      </h2>
+      <p>
+        アイコンと同じ方法でインストール、設定できます
+      </p>
+      <p>
+        カーソルテーマはアイコンと同じディレクトリにコピーします
+      </p>
+      <h2>
+        パッケージの削除
+      </h2>
+      <p>
+        不要なパッケージを削除します
+      </p>
+      <p>
+        不要なパッケージが多いとisoサイズがどんどん大きくなってしまいますのでなるべく小さくします
+      </p>
+      <p>
+        インストールされているパッケージは以下のコマンドで確認できます
+      </p>
+      <p><pre><code>$ sudo dpkg -l | less</code></pre></p>
+      <p>
+        終了時は「q」キーを押します
+      </p>
+      <p>
+        Gnome系のパッケージは削除できるかもしれません
+      </p>
+      <p>
+        削除してよいかどうか分からなかったらパッケージ名で検索してみたり、Basixと比較してみると良いかもしれません
+      </p>
+      <p>
+        削除する際は「-y」で一気に削除するのではなく、削除されるパッケージを確認して確実に削除してください
+      </p>
+      <p>
+        また、削除の際は「remove」ではなく「purge」を使用してください
+      </p>
+      <p>
+        違いはというと、「remove」では設定ファイルは削除されませんが、「purge」では設定ファイルまで削除されます
+      </p>
+      <p>
+        必要以上の設定ファイルはごみになるだけなので削除します
+      </p>
+      <p>
+        パッケージを削除する際は以下のテンプレートを使用すると簡単です
+      </p>
+      <p>
+        <pre><code>$ sudo apt-get purge hogehoge</code></pre>
+      </p>
+      <p>
+        (hogehogeは各自で置き換えてください)
+      </p>
+
+      <h2>
+        パッケージのインストール
+      </h2>
+      <p>
+        自分の好きなパッケージをインストールします
+      </p>
+      <p>
+        標準のリポジトリになければ自分でリポジトリを追加します
+      </p>
+      <p>
+        おすすめのパッケージは「UbuntuCleaner」です
+      </p>
+      <p>
+        リポジトリを追加してインストールします
+      </p>
+      <p>
+        不要なパッケージを削除してくれるのでディストリビューション作成には必須です
+      </p>
+      <h2>
+        デスクトップのカスタマイズ
+      </h2>
+      <p>
+        デスクトップのカスタマイズを行います
+      </p>
+      <p>
+        Xfceの場合は自分の好きな位置にパネルを配置します
+      </p>
+      <p>
+        Xubuntuに標準で入っているアプリケーションメニューは以下のコマンドでインストールできます
+      </p>
+      <p>
+        <pre><code>$ sudo apt -y install xfce4-whiskermenu-plugin</code></pre>
+      </p>
+      <p>
+        Xfce以外のデスクチップ環境でもある程度はカスタマイズできると思いますが、Gnomeなどはプラグインを追加する程度だと思います
+      </p>
+      <p>
+        SereneLinuxでは、パネルを上に配置し、長さを変更、アイテムの配置を変更して「cairo-dock」をインストール、設定しています
+      </p>
+      <p>
+        UIはディストリビューションの顔になるのでしっかりと考える必要があります
+      </p>
+      <h2>
+        設定ファイルの保存
+      </h2>
+      <p>
+        いよいよ最終工程です
+      </p>
+      <p>
+        今まで設定した項目をisoに適用させるために保存します
+      </p>
+      <p>
+        BodhiBuilderでは/home以下はisoに入れないので.configといった設定ファイルも保存されません
+      </p>
+      <p>
+        そのために別のディレクトリに.configなどをコピーする必要があります
+      </p>
+      <p>
+        それでは順番に見ていきましょう
+      </p>
+      <h3>
+        1.設定を変更したソフトを書き出す
+      </h3>
+      <p>
+        設定を変更したソフトを書き出します
+      </p>
+      <p>
+        SereneLinuxでは、「Cairo-Dock」や「Xfce4」などが変更されています
+      </p>
+      <h3>
+        2.変更されたソフトの設定ファイルを見つけ出す
+      </h3>
+      <p>
+        ほとんどの設定ファイルはユーザディレクトリ下の.configディレクトリ内に保存されています
+      </p>
+      <p>
+        そのディレクトリを別のディレクトリにコピーしておきます
+      </p>
+      <p>
+        一部の設定ファイルはホームディレクトリ直下や、別の場所に保存されていることもあるのでインターネット上で情報を探すなりfindコマンドを実行するなりして設定ファイルを探し出してください
+      </p>
+      <h3>
+        3.見つけ出した設定ファイルを、スケルトンディレクトリにコピーする
+      </h3>
+      <p>
+        設定ファイルのディレクトリ構造をスケルトンディレクトリに再現します
+      </p>
+      <p>
+        Debian系のスケルトンディレクトリは以下のパスです
+      </p>
+      <p>
+        <pre><code>/etc/skel</code></pre>
+      </p>
+      <p>
+        上記のパスを~/(ホームディレクトリ)に見立てて.configなどのディレクトリを作成し、設定ファイルや設定フォルダをコピーします
+      </p>
+      <p>
+        新しいユーザやisoが作成される際はスケルトンディレクトリ内のデータが~/にコピーされます
+      </p>
+      <p>
+        例えば~/.config/hoge.confのファイルをスケルトンディレクトリにコピーしたかったら/etc/skel/.config/hoge.confにコピーします
+      </p>
+      <p>
+        変更されたソフトの設定ファイルをすべてコピーしないと正常に作動しないのでしっかりとコピーする必要があります
+      </p>
+      <p>
+        かといって、全部丸々コピーするのもよくありません
+      </p>
+      <p>
+        個人情報までisoに含んでしまうかもしれないのでスケルトンディレクトリにコピーするファイルやフォルダはしっかりと内容を見ておくことが大切です
+      </p>
+      <p>
+        この部分は非常に複雑なのでわからなければ筆者のDMもしくはメールに来てください
+      </p>
+      <p>
+        この作業は設定を変更するたびにし直す必要があります
+      </p>
+      <h2>
+        インストールスライドの変更
+      </h2>
+      <p>
+        インストール中に表示されるインストールスライドを変更します
+      </p>
+      <p>
+        インストールスライドはubiquity-slideshow-*という形式のパッケージで設定されています
+      </p>
+      <p>
+        なので、まずはそのパッケージを削除します
+      </p>
+      <h3>
+        1.ディストリビューション標準のスライドを削除する
+      </h3>
+      <p>
+        以下のコマンドを実行してインストールされているパッケージを見つけ出します
+      </p>
+      <p>
+        <pre><code>$ sudo dpkg -l | grep "ubiquiy-slideshow"</code></pre>
+      </p>
+      <p>
+        出てきたパッケージを以下のコマンドで削除します
+      </p>
+      <p>
+        <pre><code>$ sudo apt-get purge -y hogehoge</code></pre>
+      </p>
+      <p>
+        「hogehoge」を出てきたパッケージ名に置き換えてください
+      </p>
+      <h3>
+        2.ベースになるパッケージをインストールする
+      </h3>
+      <p>
+        以下のコマンドを実行してインストールします
+      </p>
+      <p>
+        <pre><code>$ sudo apt -y install ubiquity-slideshow-xubuntu</code></pre>
+      </p>
+      <p>
+        インストールされたスライドはHTMLやCSS、JavaScriptで書かれています
+      </p>
+      <p>
+        それらを編集して自分のディストリビューション用のスライドを作成していきます
+      </p>
+      <h3>
+        スライドを編集する
+      </h3>
+      <p>
+        スライドを編集します
+      </p>
+      <p>
+        スライドのデータは以下のパスに保存されています
+      </p>
+      <p>
+        <pre><code>/usr/share/ubiquiy-slideshow/slides/</code></pre>
+      </p>
+      <p>
+        スクリーンショットなどのファイル名は自由に変更できますが、htmlのファイル名は編集しないことをおすすめします
+      </p>
+      <p>
+        アイコン、スクリーンショットを準備してそれぞれのフォルダに保存したあとはhtmlを編集していきます
+      </p>
+      <p>
+        上のパスの直下にあるhtmlは英語で書きます
+      </p>
+      <p>
+        <pre><code>/usr/share/ubiquity-slideshow/l10n/ja/</code></pre>
+      </p>
+      <p>
+        こちらのパスに日本語のスライドを配置します
+      </p>
+      <p>
+        HTML内の記述のアイコンやスクリーンショットのファイル名と実際のファイル名を一緒にします
+      </p>
+      <p>
+        ある程度の文章が完成したら、HTMLの構文チェックを行います
+      </p>
+      <p>
+        ブラウザでは表示できても、構文ミスが有るとスライドでは正常に表示されないことがあります
+      </p>
+      <p>
+        私も当初はこれでかなり困りました
+      </p>
+      <p>
+        HTMLが完成したらCSSを書いていきます
+      </p>
+      <p>
+        CSSは実際にプレビューしながらの編集ができないのでかなり難しいですが頑張ってください
+      </p>
+      <h3>
+        作成したファイルの権限を変更する
+      </h3>
+      <p>
+        以下のコマンドでファイルの権限を変更します
+      </p>
+      <p>
+        <pre><code>$ sudo chown -R root:root /usr/share/ubiquity-slideshow/</code></pre>
+        <pre><code>$ sudo chmod -R 755 /usr/share/ubiquity-slideshow/</code></pre>
+      </p>
+      <p>
+        コマンドの意味を簡単に解説すると、1行目で/usr/share/ubiquity-slideshow/以下のすべてのファイルの所有者と所有グループをrootにしています
+      </p>
+      <p>
+        2行目では/usr/share/ubiquity-slideshow/以下のファイルすべてのパーミッションを変更しています
+      </p>
+      <p>
+        所有者は「読み取り、書き込み、実行」のすべてを行うことができて、所有グループとその他の人は「読み取り、実行」ができるようにしています
+      </p>
+      <p>
+        パーミッションの設定を間違えると正常に表示されなかったり自由に改変されてしまったりします
+      </p>
+      <p>
+        インストールスライドは何度のisoを作成して実際に確認するのが一番です
+      </p>
+      <h2>
+        インストーラアイコンを変更する
+      </h2>
+      <p>
+        ISOでライブ起動をした時に、デスクトップに「~~をインストールする」というアイコンが表示されます
+      </p>
+      <p>
+        このアイコンがデフォルトのままだとBodhiLinuxのままになってしまいます
+      </p>
+      <p>
+        このアイコンを変更していきましょう
+      </p>
+      <p>
+        変更方法は簡単です
+      </p>
+      <p>
+        アイコンにしたいファイルを用意し、以下のパスにコピーします
+      </p>
+      <p>
+        <pre>
+          <code>/usr/share/icons/bbinstall.png
+/usr/share/icons/bbinstall_previous.png</code>
+        </pre>
+      </p>
+      <p>
+        同じファイルを2つにコピーします
+      </p>
+      <p>
+        これだけでアイコンが変更されます
+      </p>
+      <p>
+        なぜかシンボリックリンクでは正常にできませんでした
+      </p>
+      <p>
+        ハードリンクならうまくいくかもしれません
+      </p>
+      <h2>
+        OS名の変更
+      </h2>
+      <p>
+        OSの名前を変更します
+      </p>
+      <p>
+        この変更はGrubやBodhiBuilderなど、全てに適用されます
+      </p>
+      <p>
+        OS名などは以下のファイルに情報が記載されています
+      </p>
+      <p>
+        <pre><code>/usr/lib/os-release</code></pre>
+      </p>
+      <p>
+        このファイルの1箇所を修正すれば大丈夫です
+      </p>
+      <p>
+        変更可能な変数は「PRETTY_NAME」、「HOME_URL」「SUPPORT_URL」です
+      </p>
+      <p>
+        実際に変更するのは「PRETTY_NAME」だけで大丈夫です
+      </p>
+      <p>
+        自分でディストリビューションのフォーラムなどを作るのであればそのURLを入力してください
+      </p>
+      <p>
+        上の変数以外は変更しないでください
+      </p>
+      <p>
+        リポジトリ追加やインストールができなくなります
+      </p>
+      <p>
+        参考に、SereneLinuxのソースを載せておきます
+      </p>
+      <p>
+        <pre><code>NAME="Ubuntu"
+VERSION="18.04.2 LTS (Bionic Beaver)"
+ID=ubuntu
+ID_LIKE=debian
+PRETTY_NAME="SereneLinux_19Q1.7.1_R1"
+VERSION_ID="18.04"
+HOME_URL="https://www.ubuntu.com/"
+SUPPORT_URL="https://help.ubuntu.com/"
+BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
+PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
+VERSION_CODENAME=bionic
+ UBUNTU_CODENAME=bionic</code></pre>
+      </p>
+      <h2>
+        Basixの独自ファイルを削除する
+      </h2>
+      <p>
+        ここの操作は詳しい人のみ行ってください
+      </p>
+      <p>
+        Basixは独自に/etc/basixに設定ファイルを持っています
+      </p>
+      <p>
+        それを削除しないと上のOS名などが上書きされてしまいます
+      </p>
+      <p>
+        しかしPlymouthテーマ(起動スプラッシュ)などのデータも入っているためうかつに触ることはできません
+      </p>
+      <p>
+        (これ以降はあとで書きます...)
+      </p>
+      <h2>
+        isoをビルドする
+      </h2>
+      <p>
+        いよいよisoビルドです
+      </p>
+      <p>
+        今までお疲れ様でした
+      </p>
+      <p>
+        iso作成は次のページで解説しています
+      </p>
+      <h3 class="goto">
+        <a href="makeiso.html">ISO作成編へ行く</a>
+      </h3>
+    </main>
+
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/distribution.html b/buildmydist/page/distribution.html
new file mode 100644 (file)
index 0000000..bf76043
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~配布編~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      BodhiBuilderにあるバグの修正方法を解説しているのはここだけ!
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう ~配布編~</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a class="active" href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+      <h2>
+        配布をする
+      </h2>
+      <p>
+        作成したISOを配布します
+      </p>
+      <p>
+        公式サイトを用意して、そこにリンクを設置します
+      </p>
+      <p>
+        実際にISOを置くのは
+        <a href="">GoogleDrive</a>
+        や
+        <a href="">アップローダ</a>
+        、
+        <a href="">MEGA</a>
+        などのアップロードできるサービスです
+      </p>
+      <p>
+        WordPressで公式サイトを作成します
+      </p>
+      <p>
+        おすすめのサーバは無料である程度利用できる
+        <a href="">Xfree</a>
+        です
+      </p>
+      <p>
+        Xfreeなどの無料サーバで十分ですが、有料サーバを使用してもいいでしょう
+      </p>
+      <p>
+        最低限のトップページとダウンロードページができたら完成です
+      </p>
+      <p>
+        WordPressの使い方は解説しないので自分で調べてください
+      </p>
+      <p>
+        参考にSereneLinuxの公式サイトを載せておきます
+      </p>
+      <p>
+        <a href="https://serenelinux.xyz" target="_blank">https://serenelinux.xyz</a>
+      </p>
+      <h2>
+        宣伝する
+      </h2>
+      <p>
+        公式サイトを作成したら、TwitterなどのSNSやOSDN、Distro#aithなどに登録します
+      </p>
+      <p>
+        それぞれのサービスの使い方のここでは解説しませんが、作ったOSをたくさんの人に使ってもらうためには必須です
+      </p>
+      <h2>
+        サポートやアップデートを行う
+      </h2>
+      <p>
+        LTSが更新されるたびにアップデートをします
+      </p>
+      <p>
+        ベースにするOSがアップデートされてからアップデートします
+      </p>
+      <h2>
+        頑張る
+      </h2>
+      <p>
+        今までにたくさんのディストリビューションができて、その分たくさん開発が中止になりました
+      </p>
+      <p>
+        ディストリビューションづくりは結局作者のモチベーションなので、飽きずに頑張ってください^^
+      </p>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/form-thanks.html b/buildmydist/page/form-thanks.html
new file mode 100644 (file)
index 0000000..56d7fb4
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう 編
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      BodhiBuilderにあるバグの修正方法を解説しているのはここだけ!
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+      <h2>
+        受付を完了しました
+      </h2>
+      <p>
+        フォームの内容は管理人が確認させていただきます。
+      </p>
+      <p>
+        ご利用ありがとうございました。
+      </p>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/form.html b/buildmydist/page/form.html
new file mode 100644 (file)
index 0000000..03b44be
--- /dev/null
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      このサイトに関する情報を書いている場所です。
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a class="active" href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+      <h2>
+        メールフォーム
+      </h2>
+      <p>
+        何かありましたらこちらのメールフォームで問い合わせを行ってください
+      </p>
+      <p>
+        返信は遅くなるかもしれませんが必ず確認します
+      </p>
+
+      <form method="POST" action="http://hayao819.php.xdomain.jp/mail.php">
+        <table>
+          <tbody>
+            <tr>
+              <td>
+                題名*
+              </td>
+              <td>
+                <input type="text" name="題名" size="50">
+              </td>
+            </tr>
+            <tr>
+              <td>
+                名前*
+              </td>
+              <td><input type="text" name="name" size="50"></td>
+            </tr>
+            <tr>
+              <td>メールアドレス*</td>
+              <td><input type="tex" name="Email" size="50"></td>
+            </tr>
+            <tr>
+              <td>性別*</td>
+              <td>
+                <select name="性別" size="1">
+                  <option value="男">男</option>
+                  <option value="女">女</option>
+                  <option value="その他">その他</option>
+                  <option value="教えたくない">教えたくない</option>
+                </select>
+              </td>
+            </tr>
+            <tr>
+              <td>お問い合わせ内容*</td>
+              <td><textarea name="お問い合わせ内容" cols="60" rows="10">ここにお問い合わせ内容を入力してください</textarea></td>
+            </tr>
+            <tr>
+              <td>利用中のOS*</td>
+              <td>
+                <select name="利用中のOS" size="1">
+                  <option value="Windows 7">Windows 7</option>
+                  <option value="Windows 8">Windows 8</option>
+                  <option value="Windows 8.1">Windows 8.1</option>
+                  <option value="Windows 10">Windows 10</option>
+                  <option value="Windows Insider Preview">Windows Insider Preview</option>
+                  <option value="以前のWindows">以前のWindows</option>
+                  <option value="Mac OS X">Mac OS X</option>
+                  <option value="Linux ( Ubuntu・Debian系 )">Linux ( Ubuntu・Debian系 )</option>
+                  <option value="Linux ( Arch系 )">Linux ( Arch系 )</option>
+                  <option value="Linux ( RedHat系 )">Linux ( RedHat系 )</option>
+                  <option value="Linux ( その他 )">Linux ( その他 )</option>
+                  <option value="Android 4.4以前">Android 4.4以前</option>
+                  <option value="Android 5.0 以降">Android 5.0 以降</option>
+                  <option value="iOS">iOS</option>
+                  <option value="BSD">BSD</option>
+                  <option value="other">その他のOS</option>
+                  <option value="わからない">わからない</option>
+                </select>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+        <input type="submit" value="確認">
+      </form>
+
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/history.html b/buildmydist/page/history.html
new file mode 100644 (file)
index 0000000..9edd61c
--- /dev/null
@@ -0,0 +1,296 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      更新履歴
+    </title>
+    <link rel="stylesheet" href="../style/history.css">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <h3>
+      2021/07/23
+    </h3>
+    <p>PHPとJavaScriptを使って新しくサイトを作り直しました。</p>
+    <p>そのリンクをヘッダーに掲載しました。</p>
+    <h3>
+      2020/04/12
+    </h3>
+    <p>
+      サーバのパスワードを紛失したり受験で忙しかったりとずっと更新を怠ってました!<br>
+      SereneTeamがFascodeに変わったりと当時と比べて変わった部分が多いのでこれからちょこちょこと修正していきます。
+    </p>
+    <p>
+      <ul>
+        <li>
+          古い情報(現在は使用できない情報を削除した)
+        </li>
+        <li>
+          BodhiBuilderをインストールする方法を修正した
+        </li>
+        <li>
+          古い情報を削除
+        </li>
+        <li>
+          一部表記を修正
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/06/04
+    </h3>
+    <p>
+      <ul>
+        <li>
+          <a href="form.html">メールフォーム</a>作成
+        </li>
+        <li>
+          サイトマップ更新
+        </li>
+        <li>
+          逮捕プロジェクトのページを変更
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/05/18
+    </h3>
+    <p>
+      <ul>
+        <li>
+          OS名の変更について追記
+        </li>
+        <li>
+          Basix設定ファイルについて追記
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/05/17
+    </h3>
+    <p>
+      <ul>
+        <li>
+          一部ページ説明の変更
+        </li>
+        <li>
+          サイトマップの更新
+        </li>
+        <li>
+          更新履歴HTMLの不要なタグを削除
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/05/13
+    </h3>
+    <p>
+      <ul>
+        <li>
+          サイトのURLを変更しました
+          <br>
+          以前は<strong>http://serenelinux.php.xdomain.jp/</strong>だったのですが、<strong><a href="http://serenelinux.html.xdomain.jp/">http://serenelinux.html.xdomain.jp/</a></strong>へと変更になりました
+          <br>
+          理由は、現在サーバをお借りしているXfreeさんでは、PHPを使用可能なサーバだとスマホ版でかなり大きい広告が表示されてしまうためです
+          <br>
+          HTMLのみのサーバなら表示されないと聞いたので変更しました
+          <br>
+          以前のURLにアクセスしても自動でリダイレクトされるので心配いりません
+        </li>
+        <li>
+          ↓<a href="https://twitter.com/Radeon_VII_" target="_blank">液Tさん</a>にスタイルなどを修正してもらいました
+          <br>
+          自分でも修正しないとと思っていたのでありがたいです 液Tさんありがとうございます!
+        </li>
+        <li>
+          <h4>Pull Request by 液T(a)i</h4>
+          KDEの情報を最新に変更
+          Noto Sansフォントの適用
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/05/05
+    </h3>
+    <p>
+      <ul>
+        <li>
+          逮捕されるようにした
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/05/04
+    </h3>
+    <p>
+      <ul>
+        <li>
+          令和ですね!!
+        </li>
+        <li>
+          文字色を変更
+        </li>
+        <li>
+          参考にしたサイトをめとめたページを追加
+        </li>
+        <li>
+          タイトルとかをまとめた
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/28
+    </h3>
+    <p>
+      <ul>
+        <li>
+          Chromeに便乗してダークテーマ化
+        </li>
+        <li>
+          表を中央に配置
+        </li>
+        <li>
+          その他細かいデザイン変更
+        </li>
+        <li>
+          スマホ用レイアウトの文字の大きさを変更
+        </li>
+        <li>
+          フッターの場所を変更
+        </li>
+        <li>
+          SereneTeamのリポジトリに関する情報を追加
+        </li>
+        <li>
+          古い情報を削除
+        </li>
+        <li>
+          OS名の変更を追加
+        </li>
+        <li>
+          インストーラアイコンを変更を追加
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/13
+    </h3>
+    <p>
+      <ul>
+        <li>
+          インストールスライドについて追記
+        </li>
+        <li>
+          サイトマップの追加
+        </li>
+        <li>
+          カスタマイズ編完成
+        </li>
+        <li>
+          アクセスカウンターの変更
+        </li>
+        <li>
+          CSSでBodyの高さを指定するようにした
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/12
+    </h3>
+    <p>
+      <ul>
+        <li>
+          HTMLの管理をGitにした
+        </li>
+        <li>
+          トップページに少しだけ追記
+        </li>
+        <li>
+          アイコン、テーマ、カーソルの設定方法を追記
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/10
+    </h3>
+    <p>
+      <ul>
+        <li>
+          カスタマイズ編のテーマ選びについての続きを書いた
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/08
+    </h3>
+    <p>
+      <ul>
+        <li>
+          カスタマイズ編の1~2を追加
+        </li>
+        <li>
+          このページにNXLinuxに関する情報を追記
+        </li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/07
+    </h3>
+    <p>
+      <ul>
+        <li>誤字の修正(指摘してくださった方ありがとうございます)</li>
+        <li>BodhiBuilderの修正内容の誤字の修正(一番肝心な部分を間違えました すみませんm(_ _)m)</li>
+      </ul>
+    </p>
+    <h3>
+      2019/04/04
+    </h3>
+    <p>
+        <ul>
+          <li>
+            ISO作成編を追加
+          </li>
+          <li>
+            アクセスカウンター設置
+          </li>
+          <li>
+            メニューバー設置
+          </li>
+          <li>
+            Aboutの追加
+          </li>
+          <li>
+            誤字修正
+          </li>
+          <li>
+            トップページの作成
+          </li>
+          <li>
+              highlight.jsの設置、利用
+          </li>
+          <li>
+            中途半端にレスポンシブ対応
+          </li>
+        </ul>
+      </p>
+    <h3>
+      2019/04/02
+    </h3>
+    <p>
+      <ul>
+        <li>
+          作成
+        </li>
+      </ul>
+    </p>
+  </body>
+</html>
diff --git a/buildmydist/page/makeiso.html b/buildmydist/page/makeiso.html
new file mode 100644 (file)
index 0000000..923c506
--- /dev/null
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~ISO作成編~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      UbuntuのライブDVDやそのISOの作成方法について解説しています。
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- '<pre><code class="prettyprint linenums"></code></pre>' -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう ~ISO作成編~</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a class="active" href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+
+      <h2>
+        ISO作成について
+      </h2>
+      <p>
+        いよいよISOを作成していきます
+      </p>
+      <p>
+        ISO作成には『BodhiBuilder』というフリーソフトを使用していきます
+      </p>
+      <p>
+        ですが、このソフト実はバグがあり正常にISOを作成することができません
+      </p>
+      <p>
+        このサイトはそのバグ回避の解説を行っている唯一のサイトです
+      </p>
+
+
+      <h2>
+        Basixに付属しているBodhiBuilderを削除する
+      </h2>
+      <p>
+        Basixに付属しているBodhiBuilderは少しバージョンが違い、正常に動作しない可能性があるので削除します
+      </p>
+      <p>
+        以下のコマンドで簡単に削除できます
+      </p>
+      <p>
+        <pre><code>$ sudo apt-get -y purge bodhibuilder</code></pre>
+        <pre><code>$ sudo apt-get -y auoremove</code></pre>
+      </p>
+      
+      <h2>
+        SereneLinuxのリポジトリからBodhiBuilderをインストールする
+      </h2>
+      <p>
+        <a href="https://ja.osdn.net/projects/serene/storage/repo/serene/pool/main/b/bodhibuilder/">こちらのリンク</a>からSereneLinux用のBodhiBuilderをダウンロードしてください
+      </p>
+      <p>
+        その後、何らかの方法でインストールを行って下さい(dpkgやapt、gdebiなど)
+      </p>
+      <h2>
+        BodhiBuilderを実行してISOを作成する
+      </h2>
+      <p>
+        いよいよスクリプトを走らせます
+      </p>
+      <p>
+        ターミナルエミュレーターを起動して以下のコマンドで起動します
+      </p>
+      <p>
+        <pre><code>$ gksu bodhibuilder-gtk</code></pre>
+      </p>
+      <p>
+        「OK」をクリックします
+      </p>
+      <p>
+        <img src="../images/bodhibuilder1.PNG" alt="bodhibuilder起動直後">
+      </p>
+      <p>
+        「Settings」タブに移動して、それぞれの項目を入力します
+      </p>
+      <p>
+        「Username」には、インストール時と同じ名前を入力してください
+      </p>
+      <p>
+        「CD Label」では、32文字以内で入力してください
+      </p>
+      <p>
+        それ以上はエラーになります
+      </p>
+      <p>
+        「Squashfs options」には「-no-recovery -always-use-fragments -b 1M -no-duplicates」と入力してください
+      </p>
+      <p>
+        (筆者もこれの意味はわかっていませんがBasixではこのオプションがつけられていたらしいです)
+      </p>
+      <p>
+        あとは自由で構いません
+      </p>
+      <p>
+        設定が終わったら、「Actions」タブに戻って「Dist」ボタンをクリックし、ISO作成を開始します
+      </p>
+      <p>
+        すると、Outputタブへ自動で移動し、いろいろログが出力されます
+      </p>
+      <p>
+        ISO作成が終わるとまたダイアログが出るので、それまで待ちます
+      </p>
+      <p>
+        作成中はCPUをたくさん使用するので注意してください
+      </p>
+      <h2>
+        作成したISOの場所
+      </h2>
+      <p>
+        作成が終わったら、ISOを確認しましょう
+      </p>
+      <p>
+        初期設定のままなら下のパスに保存されています
+      </p>
+      <p>
+        <pre><code>/home/bodhibuilder/bodhibuilder</code></pre>
+      </p>
+      <p>
+        このパスの中に.isoや.md5、.sha256などがあるはずです
+      </p>
+      <p>
+        この3つのファイルを配布するので、クラウドサービスなどを使うなり共有フォルダを使うなりしてホスト環境(仮想マシンの外)に持ってきておいてください
+      </p>
+      <h2>
+        起動チェック
+      </h2>
+      <p>
+        ISOが起動するか確かめましょう
+      </p>
+      <p>
+        最初に準備した実験用DVD-RWにISOを書き込んで実機で実験するか、仮想マシンで動作させます
+      </p>
+      <p>
+        <a href="preparation.html">
+          準備編
+        </a>
+        の「仮想環境にBasixをインストールする」と同じ方法で仮想マシンにインストールします
+      </p>
+      <p>
+        自分の思ったとおりのインストールスライドや、アイコン、テーマになっていれば成功です
+      </p>
+      <p>
+        うまくできなかったら、
+        <a href="customize.html">
+          カスタマイズ編
+        </a>
+        で確認するか、私のTwitter(
+        <a href="../index.html">
+          トップページ
+        </a>
+        )の私のTwitterのDMに来てください
+      </p>
+      <h2>
+        配布編へ続く
+      </h2>
+      <p>
+        自分用のISOを作った人はこれで終わりですね。お疲れ様でした
+      </p>
+      <p>
+        配布するためのOSを作った人は一番最後の「OSを配布する」という作業が残っています^^;
+      </p>
+      <p>
+        それでは、また次回。
+      </p>
+      <h3 class="goto">
+        <a href="distribution.html" class="goto">配布編へ行く</a>
+      </h3>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/preparation.html b/buildmydist/page/preparation.html
new file mode 100644 (file)
index 0000000..4c8ea6a
--- /dev/null
@@ -0,0 +1,596 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~準備編~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      まずは準備編ということでベースとなるOSを決めたり、開発環境を構築したりしていきます
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう ~準備編~</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a class="active" href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+
+
+      <h2 class="msr_h203">
+        OSのコンセプトを決める
+      </h2>
+      <p>
+        まずはOSのコンセプトを考えます。
+      </p>
+      <p>
+        <ul>
+          <li>
+            軽量なOS
+          </li>
+          <li>
+            自由度の高いOS
+          </li>
+          <li>
+            初心者向けなOS
+          </li>
+          <li>
+            Windowsからの移行を狙ったOS
+          </li>
+        </ul>
+        などの『ターゲットにするユーザ』と同時に考えるとすぐに思い浮かぶと思います。
+      </p>
+      <p>
+        「自分専用のOS」というのもありですね♪。
+      </p>
+      <p>
+        SereneLinuxでは、『軽量で美しくわかりやすいUI』をコンセプトに開発を進めています。
+      </p>
+
+
+      <h2 class="msr_h203">開発環境を準備する。
+
+      </h2>
+        <p>
+          実際に開発を行っていく際に必要な物を準備します。
+        </p>
+        <p>
+          必要なものは
+          <ul>
+            <li>
+              開発用の高性能なパソコン
+            </li>
+            <li>
+              データを保存する大容量のHDD
+            </li>
+            <li>
+              ベースになるOSのISOイメージ
+            </li>
+            <li>
+              仮想化ソフトウェア
+            </li>
+            <li>
+              実験用のDVD-RW
+            </li>
+            <li>
+              定期的に更新していく時間(配布用のものを作成する場合のみ)
+            </li>
+            <li>
+              LinuxをGUIである程度カスタマイズできる能力(これから学ぶこともできます)
+            </li>
+            <li>
+              問題があったときに自分で検索したり、コミュニティに質問したりできる能力
+            </li>
+          </ul>
+          たったのこれだけです。
+        </p>
+      <p>一つずつ見ていきましょう。
+
+      </p>
+
+      <h3>
+        開発用の高性能なパソコンとデータを保存する大容量のHDD
+      </h3>
+        <p>
+          まずは、
+          <strong>
+            開発用の高性能なパソコン
+          </strong>
+          と
+          <strong>
+            データを保存する大容量のHDD
+          </strong>
+          ですが、『高性能』と言うのには理由があります。
+        </p>
+        <p>
+          それは、主な開発を仮想環境上で行うからです。
+        </p>
+        <p>
+          仮想環境とはパソコンの中に仮想的に作られた環境のことを指します。
+        </p>
+        <p>
+          あくまで『仮想』なのでバックアップや性能の上げ下げを簡単に行うことができ、
+          <strong>
+            容量が許す限り
+          </strong>
+          無限に作成できます。
+        </p>
+        <p>
+          また、過去のバージョンなどを保存するためにもたくさんの容量が必要です。
+        </p>
+        <p>
+          っと、HDDがたくさん必要な方法はわかったと思いますが、高性能なパソコンが必要な理由がまだでしたね。
+        </p>
+        <p>
+          仮想環境ではパソコンの中にパソコンを作るわけです。(細かい仕組みは違いますが)なのでその仮想的なパソコンの分までをカバーする性能が必要です。
+        </p>
+        <p>
+          なので高性能なパソコンが必要になります。
+        </p>
+        <h4>
+          SereneLinuxの開発に使われているPCの性能
+        </h4>
+          <p>
+            余談ですが、参考としてSereneLinuxの開発に使われている筆者のメインPCを紹介します。
+          </p>
+          <p>
+            このPCは7~8年前の古いPCですが現役でバリバリ動作しています。
+          </p>
+          <p>
+            CPU:Xeon E3-1275 3.4GHz
+            <br>
+            RAM:DDR3-12800 4GB x 2
+            <br>
+            GPU:NVIDIA GeForce GTX 645
+            <br>
+            SSD:SPCC SSD 239GB
+            <br> 
+            OS:Windows 10 19H1 Insider Preview Pro 64bit
+            <br>
+          </p>
+
+
+      <h3>
+        ベースになるOSのISOイメージ
+      </h3>
+      <p>
+        次にソフトウェア面を準備していきます。
+      </p>
+      <p>
+        難しいように見えますが簡単です。
+      </p>
+      <p>
+        まず、ベースとなるOSのISOイメージです
+      </p>
+      <p>
+        ベースになるISOイメージを準備するにはベースになるOSを決める必要があります。
+      </p>
+      <h4>
+        ベースのOSを決めよう。
+      </h4>
+      <p>
+        ベースになるOSはUbuntu系が簡単でおすすめです(というかUbuntu系以外はこのサイトの方法ではできません)。
+      </p>
+      <p>
+        UbuntuのISOを直接改変してもいいですが、余分なソフトが多く含まれており自分のOSも重くなってしまいます。
+      </p>
+      <p>
+        逆に、MinimalISOという超最低限のUbuntuから作成してもいいですが、設定系のソフトウェアが一切入っていないので自分で調べて入れる必要があります。(入れなくてもいいですが、ユーザにとっては非常に面倒です。)
+      </p>
+      <h4>
+        じゃあどれを使えばいいの?
+      </h4>
+      <p>
+        そこで、日本人の方が作成した「OS作成用のOS」があります。
+      </p>
+      <p>
+        そのOSは
+        <strong>
+          Basix
+        </strong>
+        と言い、日本のLinux界隈で有名な
+        <a href="http://simosnet.com/livecdroom/">
+          ライブCDの部屋
+        </a>
+        の管理人さんが作成、公開しています。
+      </p>
+      <p>
+        ISOのダウンロード先は
+        <a href="http://simosnet.com/livecd/basix/">
+          こちら
+        </a>
+        です。
+      </p>
+      <p>
+        今回はbasix-4.0_x86_64.isoを利用して作成していきます。(SereneLinuxもこれで作成されています。)
+      </p>
+      <p>このDLしたISOは削除せずにとっておいてください。
+
+      </p>
+
+      <h3>
+        仮想化ソフトウェア
+      </h3>
+      <p>
+        また難しそうな名前が出てきました。
+      </p>
+      <p>
+        これも簡単なので大丈夫です。
+      </p>
+      <p>
+        今回は仮想化ソフトウェアとしてオープンソース(ソフトウェアの中身が公開されていること)で開発されているOracle製の
+        <strong>
+          VirtualBox
+        </strong>
+        を利用していきます。
+      </p>
+      <p>
+        仮想化ソフトウェアには他にもVMware Workstation PlayerやHyper-V、QEMUなどがあります。
+      </p>
+      <p>
+        (自分のお気に入りの仮想化ソフトウェアがあるならそちらを使っていただいて結構です。)
+      </p>
+      <h4>
+        ダウンロード
+      </h4>
+      <p>
+        <a href="https://www.virtualbox.org/wiki/Downloads">
+          こちら
+        </a>
+        からダウンロードします。
+      </p>
+      <p>
+        <img src="../images/virtualbox_download_1.PNG" alt="VirtualBoxのダウンロードする場所">
+      </p>
+      <p>
+        Windowsを使っている人はWindows hostsから、macOSの方はOS X hostsからダウンロードしてください。
+      </p>
+      <p>
+        Linuxを使っている方はそれぞれのディストリビューションのパッケージ管理システムからインストールしてください。
+      </p>
+      <p>
+        Ubuntu系なら
+        <pre><code>$ sudo apt-get -y install virtualbox</code></pre>
+      </p>
+      <p>
+        でインストールできます。
+      </p>
+      <p>
+        ダウンロード後はWindowsの場合はそのままウィザードに沿ってインストールしてください。
+      </p>
+      <p>
+        macOSのほうはわかりません。(環境がないので) すみませんm(_ _)m
+      </p>
+      <h4>
+        エクステンションパックの導入
+      </h4>
+      <p>
+        カタカナが並んでいますが、すぐに終わります。
+      </p>
+      <p>
+        <a href="https://www.virtualbox.org/wiki/Downloads">
+          先程のサイト
+        </a>
+        の下にある
+      </p>
+      <p>
+        <img src="../images/virtualbox_download_2.PNG" alt="エクステンションパックのダウンロードする場所">
+      </p>
+      <p>
+        からダウンロードしてください。
+      </p>
+      <p>
+        こちらはWindowsとかMacとか関係ないです。
+      </p>
+      <p>
+        ダウンロード後はそこままダウンロードしたファイルをVirtualBoxで読み込んで完了です。
+      </p>
+      <h4>
+        確認
+      </h4>
+      <p>
+        メニューからVirtualBoxを選んで、以下の画面が起動すればインストール完了です。
+      </p>
+      <p>
+        <img src="../images/virtualbox_done.PNG" alt="VirtualBox">
+      </p>
+      <p>これで仮想化ソフトウェアの準備も完了です。
+
+      </p>
+
+      <h3>
+        実験用のDVD-RW
+      </h3>
+      <p>
+        作成したISOイメージを実際に書き込んで起動するかどうかのチェックに使用します。
+      </p>
+      <p>
+        仮想環境だけではチェックできないドライバ(マウスなどの周辺機器を使うためのソフトウェア)の問題などの確認に使用します。
+      </p>
+      <p>
+        DVD-Rだと繰り返し使用できないのでDVD-RWを選んでください。
+      </p>
+      <p>
+        100円ショップで買えます。
+      </p>
+
+      <h3>
+        定期的に更新していく時間
+      </h3>
+      <p>
+        自分専用なら必要ないですね。
+      </p>
+      <p>
+        Ubuntuは年に2回アップデート版がリリースされます。
+      </p>
+      <p>
+        そのたびに自分のOSも更新させる必要があります。
+      </p>
+      <p>
+        しかし、実際のところは2年に1回リリースされる長期サポート版(LTS版)でのみ更新するディストリビューションがほとんどです。
+      </p>
+      <p>
+        実際にベースにするBasixも2年に1回の更新になります。
+      </p>
+      <p>
+        なので、2年に1回だけ開発の時間が確保できればOKです。
+      </p>
+
+      <h3>
+        LinuxをGUIである程度カスタマイズできる能力
+      </h3>
+      <p>
+        Linuxをカスタマイズするので必須ですね。
+      </p>
+      <p>
+        自分で設定を変更したり、アイコンやテーマを変更します。
+      </p>
+      <p>
+        これに関してはそれぞれによって違いがあるので各自で調べてください。
+      </p>
+      <p>
+        どうしてもわからなければ
+        <a href="https://twitter.com/Hayao0819?lang=ja">
+          作者のTwitter
+        </a>
+        のDMまで来てください。
+      </p>
+
+      <h3>
+        問題があったときに自分で検索したり、コミュニティに質問したりできる能力
+      </h3>
+      <p>
+        これはLinux共通です。
+      </p>
+      <p>
+        上と関連していますが、Linuxはフリーであるがゆえにサポートもありません。
+      </p>
+      <p>
+        TwitterやYahoo知恵袋などで誰かに質問するか、自力でググることが大切です 。
+      </p>
+      <p>
+        どうしてもわからなかったら日本のコミュニティに質問することもできますが、ISO作成などは情報が少ないため知っている人も殆どいません。
+      </p>
+      <p>
+        場合によっては英語のサイトを参考にすることもあります(Google翻訳は便利ですがプログラムのコードが変なふうに空白が空いたりしてしまうこともあるので注意してください。)
+      </p>
+
+      <h2>
+        仮想環境にBasixをインストールする
+      </h2>
+      <p>
+        先程インストールしたVirtualBoxにBasixをインストールしていきます。
+      </p>
+      <h3>
+        仮想マシンを作成す
+        る</h3>
+      <ol>
+        <li>
+          VirtualBOxを起動して「新規」をクリック。
+        </li>
+        <li>
+          下の画面で名前を自分の好きに打ち、タイプをLinux、バージョンをUbuntu(64bit)にする。
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine1.PNG" alt="新規作成画面">
+        </p>
+        <li>
+          次へをクリックして、メモリサイズを自分のパソコンの半分を割り当てる。(自分のパソコンのメモリサイズはタスクマネージャで確認。)
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine2.PNG" alt="メモリ割り当て">
+        </p>
+        <li>
+          そのまま作成をクリック。
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine3.PNG" alt="ディスク作成">
+        </p>
+        <li>
+          そのまま次へをクリック。
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine4.PNG" alt="ディスク形式">
+        </p>
+        <li>
+          そのまま次へをクリック。
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine5.PNG" alt="ディスクタイプ(可変or固定)">
+        </p>
+        <li>
+          右のボックスに「32GB」と入力して、作成をクリック。
+        </li>
+        <p>
+          <img src="../images/virtualbox_newmachine6.PNG" alt="ディスクサイズ">
+        </p>
+        <li>
+          「設定」をクリック。
+        </li>
+        <li>
+          システム→プロセッサーと移動してプロセッサー数を警告が出るギリギリまで上げる
+          。</li>
+        <li>
+          PAE/NXの有効化にチェックを入れる。
+        </li>
+        <p>
+          <img src="../images/virtualbox_setting1.PNG" alt="CPU設定">
+        </p>
+        <li>
+          ディスプレイに移動後、ビデオメモリーを128mbに設定し、3Dアクセラレーションを有効化にチェックを入れる。
+        </li>
+        <p>
+          <img src="../images/virtualbox_setting2.PNG" alt="グラフィック設定">
+        </p>
+        <li>
+          設定を閉じて、[光学ドライブ]をクリック。
+        </li>
+        <p>
+          <img src="../images/virtualbox_setting3.PNG" alt="DVD設定">
+        </p>
+        <li>
+          ディスクイメージを選択→ダウンロードしたBasixのISOを選択→開く。
+        </li>
+      </ol>
+
+
+      <h3>Basixをインストールする
+        
+      </h3>
+      <ol>
+        <li>
+          「起動」ボタンを押して起動する。
+        </li>
+        <li>
+          メニューが出たら一番上を選択する。
+        </li>
+        <p>
+          <img src="../images/basix_grub.PNG" alt="BasixのGrub画面">
+        </p>
+        <li>
+          「Basix 4.0をインストールする」をダブルクリックしてインストーラを起動する。
+        </li>
+        <p>
+          <img src="../images/basix_installicon.PNG" alt="インストーラのアイコン">
+        </p>
+        <li>
+          「続ける」をクリック。
+        </li>
+        <li>
+          キーボードが打てることを確認して「続ける」をクリック。
+        </li>
+        <li>
+          「グラフィックスとWi-Fiハードウェアと追加のメディアフォーマットのサードパーティ製ソフトウェアをインストールする」にチェックを入れて「次へ」をクリック。
+        </li>
+        <p>
+          <img src="../images/basix_install1.PNG" alt="アップデートと他のソフトウェア">
+        </p>
+        <li>
+          何も変更せずに「インストール」をクリック。
+        </li>
+        <p>
+          <img src="../images/basix_install2.PNG" alt="インストールの種類">
+        </p>
+        <li>
+          しばらく時間がかかるので待つ。
+        </li>
+        <li>
+          そのまま「続ける」をクリック。(北海道に住んでいようが沖縄に住んでいようが東京を選んでください。)
+        </li>
+        <li>
+          たまにここでフリーズっぽくなるのですが、放置して大丈夫。
+        </li>
+        <li>
+          あなたの名前の部分にディストリビューションの簡易名を(SereneLinuxではserene。)入力。
+        </li>
+        <li>
+          コンピュータの名前に簡易名+「-PC」と入力。(SereneLinuxではSerene-PC。)
+        </li>
+        <li>
+          パスワードに自分のパスワードを入力。
+        </li>
+        <li>
+          同じパスワードを下にも入力。
+        </li>
+        <li>
+          <strong>
+            「自動的にログインする」にチェックを入れる。
+          </strong>
+        </li>
+        <p>
+          <img src="../images/basix_install3.PNG" alt="ユーザ情報">
+        </p>
+        <li>
+          しばらく放置。
+        </li>
+        <li>
+          「今すぐ再起動する」をクリックして再起動
+        </li>
+        <p>
+          <img src="../images/basix_install_done.PNG" alt="インストール完了">
+        </p>
+
+
+      </ol>
+      <h2>
+        次回へ続く
+      </h2>
+      <p>本当は1ページで終わらせたかったのですが、あまりにも長くなりそうなので次回へ続けたいと思います。
+
+      </p>
+      <p>
+        <a href="https://twitter.com/Hayao0819?lang=ja">
+          作者のTwitter
+        </a>
+        をフォローしてくれるととても喜びます。(宣伝は忘れない。)
+      </p>
+      <h3  class="goto">
+        <a href="customize.html">カスタマイズ編へ行く</a>
+      </h3>
+
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/sitemap.html b/buildmydist/page/sitemap.html
new file mode 100644 (file)
index 0000000..c6e536e
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう 
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      このページではサイトの案内を行っています。
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>
+        【2019年版】Ubuntu系のOSを自作しよう
+      </h1>
+        <p>
+          BodhiBuilderを用いてオリジナルのOSを作成します。
+        </p>
+        <p>
+          自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。
+        </p>
+        <p>
+          実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。
+          
+        </p>
+        <nav>
+          <ul class="topnav">
+            <li><a href="../index.html">トップページ</a></li>
+            <li><a class="active" href="preparation.html">準備編</a></li>
+            <li><a href="#contact">カスタマイズ編</a></li>
+            <li><a href="">ISO作成編</a></li>
+            <li><a href="">配布編</a></li>
+            <li class="right"><a href="#about">About</a></li>
+            <li class="right"><a href="website.html">参考サイト</a></li>
+          </ul>
+        </nav>
+    </header>
+
+    <main>
+      <p>
+        サイトマップ予定地
+      </p>
+      <p>
+        現在準備中
+      </p>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/template.html b/buildmydist/page/template.html
new file mode 100644 (file)
index 0000000..c3ba1d1
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう 編
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      BodhiBuilderにあるバグの修正方法を解説しているのはここだけ!
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>
+        【2019年版】Ubuntu系のOSを自作しよう 編
+      </h1>
+        <p>
+          BodhiBuilderを用いてオリジナルのOSを作成します。
+        </p>
+        <p>
+          自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。
+        </p>
+        <p>
+          実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。
+          
+        </p>
+        <nav>
+          <ul class="topnav">
+            <li><a href="../index.html">トップページ</a></li>
+            <li><a class="active" href="preparation.html">準備編</a></li>
+            <li><a href="#contact">カスタマイズ編</a></li>
+            <li><a href="">ISO作成編</a></li>
+            <li><a href="">配布編</a></li>
+            <li class="right"><a href="#about">About</a></li>
+            <li class="right"><a href="website.html">参考サイト</a></li>
+          </ul>
+        </nav>
+    </header>
+
+    <main>
+
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/page/website.html b/buildmydist/page/website.html
new file mode 100644 (file)
index 0000000..a5bebfa
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="utf-8">
+    <title>
+      【2019年版】Ubuntu系のLinuxディストリビューションを自作しよう ~参考サイト~
+    </title>
+    <meta name="description" content="
+      Ubuntu派生のLinux系OSの自作方法を解説したサイトです。
+      SereneLinuxの開発者が初心者でもできるUbuntu派生OSの作成方法を画像つきで解説します。
+      BodhiBuilderにあるバグの修正方法を解説しているのはここだけ!
+    ">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <link rel="stylesheet" href="../style/main-resp.css" media="screen and (max-width: 799px)">
+    <link rel="stylesheet" href="../style/main.css" media="screen and (min-width: 800px)">
+    <link rel="stylesheet" href="../code/vs2015.css">
+    <script src="../code/highlight.pack.js"></script>
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" type="text/css" media="print" href="../style/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:100,300,400,500,700,900&amp;subset=japanese" rel="stylesheet">
+
+    <!-- class="prettyprint linenums" でコードに色付け -->
+    <!-- <pre><code class="prettyprint linenums"></code></pre> -->
+  </head>
+  <body>
+    <header>
+      <h1>【2019年版】Ubuntu系のOSを自作しよう ~参考サイト~</h1>
+      <p>BodhiBuilderを用いてオリジナルのOSを作成します。</p>
+      <p>自分の好きなデスクトップ環境やソフトウェアを入れてオリジナルのOSを作成しましょう。</p>
+      <p>実際に開発中のOS『SereneLinux』の実例を挙げながらわかりやすく解説していきます。</p>
+      <p><a href="http://hayao.fascode.net/buildmydist-2/">こちらで</a>サイト新しく作り直してます。このサイトの情報は古いのでよければどうぞ。</p>
+      <nav>
+        <ul class="topnav">
+          <li><a href="../index.html">トップページ</a></li>
+          <li><a href="preparation.html">準備編</a></li>
+          <li><a href="customize.html">カスタマイズ編</a></li>
+          <li><a href="makeiso.html">ISO作成編</a></li>
+          <li><a href="distribution.html">配布編</a></li>
+          <li class="right"><a href="about.html">About</a></li>
+          <li class="right"><a class="active" href="website.html">参考サイト</a></li>
+        </ul>
+      </nav>
+    </header>
+
+    <main>
+      <h2>
+        概要
+      </h2>
+      <p>
+        SereneTeamが参考にしたサイトです
+      </p>
+      <p>
+        自力でソースを解読したものもあるので全てではないですが参考までにどうぞ
+      </p>
+      <p>
+        カスタマイズ編に載せていないカスタマイズもあるかもしれません
+      </p>
+      <h2>
+        参考サイト一覧
+      </h2>
+      <h3>
+        起動画面について
+      </h3>
+      <p>
+        <a href="http://www.nemotos.net/?p=84" target="_blank">Ubuntu 10.04 (Lucid) 以降でsplash画面をカスタマイズしたいとき… (plymouthの使い方)</a>
+      </p>
+      <p>
+        <a href="http://moebuntu.web.fc2.com/moeplymouth.html" target="_blank">moebuntu</a>
+      </p>
+      <p>
+        <a href="http://www.nemotos.net/?p=1418" target="_blank">Ubuntu 16.04 における plymouth</a>
+      </p>
+      <p>
+        <a href="https://iww.hateblo.jp/entry/20111212/plymouth" target="_blank">plymouthのインストール - 揮発性のメモ2</a>
+      </p>
+
+      <h3>
+        ログイン画面について
+      </h3>
+      <p>
+        <a href="https://ja.wikipedia.org/wiki/LightDM" target="_blank">LightDM - Wikipedia</a>
+      </p>
+      <p>
+        <a href="https://kledgeb.blogspot.com/2013/04/ubuntu-1204-5-unity-greeterunity-greeter.html" target="_blank">Ubuntu ログイン画面 その5 - Unity Greeterについて・Unity Greeterの設定について - kledgeb</a>
+      </p>
+      <p>
+        <a href="https://cialu.net/how-to-solve-failed-to-start-session-with-lightdm-and-xfce/" target="_blank">How to solve 'Failed to start session' with LightDM and Xfce - CIALU.NET</a>
+      </p>
+      <h3>
+        Xfceについて
+      </h3>
+      <p>
+        <a href="http://www.dayomon.net/xfce/docs-4.2/xfce4-panel.html" target="_blank">Xfce 4 パネル</a>
+      </p>
+      <p>
+        <a href="https://wiki.archlinux.jp/index.php/Xfce" target="_blank">Xfce - ArchWiki</a>
+      </p>
+      <h3>
+        Cairo-Dockについて
+      </h3>
+      <p>
+        <a href="http://glx-dock.org/" target="_blank">Glx-Dock / Cairo-Dock - Home</a>
+      </p>
+      <p>
+        <a href="http://ondyrsjc.blog.jp/archives/1003986089.html" target="_blank">Linux ランチャー Cairo-Dockの使い方 : 初めてのLinux</a>
+      </p>
+      <p>
+        <a href="https://lifeisbeatfull.com/1143.html" target="_blank">Ubuntuを手軽にMac風にするDock〜Cairo Dock〜をインストール – 処分か?再生か?パソコン・スマホの格安運用法!</a>
+      </p>
+      <h3>
+        設定ファイル保存
+      </h3>
+      <p>
+        <a href="https://www.atmarkit.co.jp/flinux/rensai/linuxtips/311newuserdef.html" target="_blank">@IT:新規ユーザーのデフォルト設定を変更するには</a>
+      </p>
+      <p>
+        <a href="http://una.soragoto.net/lecture/linux/skel.html" target="_blank">スケルトンファイル | ウナのLinux講座 | ウナのIT資格一問一答</a>
+      </p>
+      <p>
+        <a href="https://artsnet.jp/archives/482/" target="_blank">/etc/skelでユーザーディレクトリの雛型設定 - Artsnet</a>
+      </p>
+      <h3>
+        Ubiquity-Slideshowについて
+      </h3>
+      <p>
+        <a href="https://launchpad.net/ubiquity-slideshow-ubuntu" target="_blank">Ubiquity Slideshow in Launchpad</a>
+      </p>
+      <p>
+        <a href="https://launchpad.net/ubuntu/+source/ubiquity-slideshow-ubuntu" target="_blank">ubiquity-slideshow-ubuntu package : Ubuntu</a>
+      </p>
+      <h3>
+        ISO作成について
+      </h3>
+      <p>
+        <a href="https://sourceforge.net/projects/bodhibuilder/" target="_blank">bodhibuilderダウンロード| SourceForge.net</a>
+      </p>
+      <p>
+        <a href="https://mobile.sites.google.com/site/memomuteki/tinylinux/bodhibuilderdevesamenuc32notacom32rimageliveisowokluedezhizuosuru" target="_blank">Bodhi Builder で vesamenu.c32 not a COM32R image Live Iso を Klue で制作する。 - memomuteki</a>
+      </p>
+      <p>
+        <a href="http://kumasan1949.zouri.jp/bodhibuilder.html" target="_blank">UbuntuおよびUbuntu派生のカスタマイズISO作成とバックアップISO作成 Bodhibuilderを使って</a>
+      </p>
+    </main>
+
+
+    <footer>
+      It is provided by SereneLinux.
+      <br>
+      Copyright
+      &copy; 2019 SereneTeam All Rights Reserved.
+      <p>
+        <script type="text/javascript" src="//ct2.shinobi.jp/sc/1744984">
+        </script>
+        <noscript><img src="//ct2.shinobi.jp/ll/1744984" alt="カウンター">
+        </noscript>
+      </p>
+    </footer>
+
+
+  </body>
+</html>
diff --git a/buildmydist/style/history.css b/buildmydist/style/history.css
new file mode 100644 (file)
index 0000000..e8c3f6b
--- /dev/null
@@ -0,0 +1,75 @@
+/*見出し系*/
+h2 {
+  background: #F8F8F8;
+  border-top: 2px solid #1B73BA;
+  box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -moz-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  box-sizing: border-box;
+  color: #1B73BA;
+  font-size: 20px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding: 10px 15px 10px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h1 {
+  color: #1B73BA;
+  /*
+  text-shadow: 2px 2px 0 #fff,
+               -2px 2px 0 #fff,
+               2px -2px 0 #fff,
+               -2px -2px 0 #fff;
+  */
+  margin-left: -4%;
+  margin-right: -4%;
+  margin-top: -3%;
+}
+h3 {
+  border-bottom: 2px solid #1B73BA;
+  font-size: 18px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding-bottom: 5px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h4 {
+  border-left: 2px solid #1B73BA;
+  font-size: 16px;
+  font-weight: bold;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+
+/* 背景 */
+html {
+  background-color: #191919;
+}
+
+body {
+  background-color: #111111;
+  color: white;
+}
+
+
+/* 箇条書き*/
+ul li {
+  line-height: 2
+}
+
+pre {
+  max-width: 100%;
+}
+
+/*リンク*/
+a {
+  text-decoration:none;
+  color: #6EDEFF;
+}
+a:hover {
+  text-decoration:underline;
+}
+
+a:visited {
+  text-decoration:none;
+  color: #6EDEFF;
+}
\ No newline at end of file
diff --git a/buildmydist/style/main-resp.css b/buildmydist/style/main-resp.css
new file mode 100644 (file)
index 0000000..9c3bce9
--- /dev/null
@@ -0,0 +1,185 @@
+
+ul.topnav {
+       overflow: hidden;
+       margin: 0;
+       padding: 0;
+       list-style-type: none;
+  background-color: #1b2538;
+}
+ul.topnav li {
+       float: left;
+}
+ul.topnav li a {
+       display: block;
+       padding: 2px 3px;
+       text-align: center;
+       text-decoration: none;
+       color: white;
+}
+ul.topnav li a:hover:not(.active) {
+  /*background-color: #a9bce2;*/
+  background-color: #1B73BA;
+}
+ul.topnav li a.active {
+       background-color: #1B73BA;
+}
+
+ul.topnav li.right, ul.topnav li {
+       float: none;
+}
+nav {
+
+  margin-bottom: 3%;
+  border-top: solid 5px #1B73BA;
+  /*border-bottom: solid 5px #1B73BA;*/
+  margin-left: -1%;
+  margin-right: -1%;
+}
+
+/*見出し系*/
+h2 {
+  background: #1d1d1d;
+  border-top: 2px solid #1B73BA;
+  box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -moz-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  box-sizing: border-box;
+  color: #1B73BA;
+  font-size: 160%;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding: 10px 15px 10px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h1 {
+  color: #1B73BA;
+  /*
+  text-shadow: 2px 2px 0 #fff,
+               -2px 2px 0 #fff,
+               2px -2px 0 #fff,
+               -2px -2px 0 #fff;
+  */
+  margin-left: 0%;
+  margin-right: 0%;
+  font-size: 160%;
+}
+h3 {
+  border-bottom: 2px solid #1B73BA;
+  font-size: 18px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding-bottom: 5px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h4 {
+  border-left: 2px solid #1B73BA;
+  font-size: 16px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding-left: 5px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+
+/*プログラムコード*/
+code {
+  font-family: Menlo, Consolas, 'DejaVu Sans Mono', monospace;
+  font-size: 14px
+}
+
+/* 背景 */
+html {
+  background-color: #191919;
+}
+
+body {
+  background-color: #191919;
+  color: #fff;
+}
+
+
+/* 箇条書き*/
+ul li {
+  line-height: 2
+}
+
+/*フッター*/
+footer{
+  background-color: #191919;
+  margin-left: -1%;
+  margin-right: -1%;
+}
+
+/*画像サイズ調整*/
+img {
+  max-width: 60%;
+  height: auto;
+  margin-top: 2%;
+}
+
+pre {
+  max-width: 100%;
+}
+
+/*~へ行く*/
+.goto {
+  text-align: center;
+  max-width: 100%;
+  margin-left: -1%;
+  margin-right: -1%;
+  padding-left: 25%;
+  padding-right: 25%;
+}
+
+/*本文フォントサイズ*/
+p {
+  font-size: 110%;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+
+/*テーブル*/
+table {
+  border: 1px solid #ddd;
+  width: 100%;
+  text-align: left;
+}
+td, th {
+  padding: 2px 2px;
+  text-align: center;
+}
+thead tr {
+  background-color: #191919;
+}
+thead tr th {
+  color: #1B73BA;
+  text-align: center;
+}
+tfoot {
+  border-top: 1px solid #ddd;
+}
+tbody tr th {
+  font-weight: bold;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+tbody tr:nth-of-type(2n) {
+  background: #191919;
+}
+
+.table {
+  padding-left: 5%;
+  padding-right: 5%;
+}
+
+
+/*リンク*/
+a {
+  text-decoration:none;
+  color: #6EDEFF;
+}
+a:hover {
+  text-decoration:underline;
+}
+
+a:visited {
+  text-decoration:none;
+  color: #6EDEFF;
+}
diff --git a/buildmydist/style/main.css b/buildmydist/style/main.css
new file mode 100644 (file)
index 0000000..5e8df16
--- /dev/null
@@ -0,0 +1,184 @@
+
+ul.topnav {
+       overflow: hidden;
+       margin: 0;
+       padding: 0;
+       list-style-type: none;
+  background-color: #1b2538;
+}
+ul.topnav li {
+       float: left;
+}
+ul.topnav li a {
+       display: block;
+       padding: 14px 16px;
+       text-align: center;
+       text-decoration: none;
+       color: white;
+}
+ul.topnav li a:hover:not(.active) {
+  /*background-color: #a9bce2;*/
+  background-color: #1B73BA;
+}
+ul.topnav li a.active {
+       background-color: #1B73BA;
+}
+ul.topnav li.right {
+       float: right;
+}
+nav {
+  margin-bottom: 4%;
+  border-top: solid 5px #1B73BA;
+  /*border-bottom: solid 5px #1B73BA;*/
+  margin-left: -4%;
+  margin-right: -4%;
+}
+
+/*見出し系*/
+h2 {
+  background: #1d1d1d;
+  border-top: 2px solid #1B73BA;
+  box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -moz-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px 0px;
+  box-sizing: border-box;
+  color: #1B73BA;
+  font-size: 20px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding: 10px 15px 10px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h1 {
+  color: #1B73BA;
+  /*
+  text-shadow: 2px 2px 0 #fff,
+               -2px 2px 0 #fff,
+               2px -2px 0 #fff,
+               -2px -2px 0 #fff;
+  */
+  margin-left: -4%;
+  margin-right: -4%;
+  margin-top: -3%;
+}
+h3 {
+  color: #1B73BA;
+  border-bottom: 2px solid rgb(68, 71, 73);
+  font-size: 18px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding-bottom: 5px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+h4 {
+  border-left: 2px solid #1B73BA;
+  font-size: 16px;
+  font-weight: bold;
+  margin: 0 0 20px;
+  padding-left: 5px;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+
+/*プログラムコード*/
+code {
+  font-family: Menlo, Consolas, 'DejaVu Sans Mono', monospace;
+  font-size: 14px
+}
+
+/* 背景 */
+html {
+  background-color: #191919;
+}
+
+body {
+  background-color: #111111;
+  margin-left: 10%;
+  margin-right: 10%;
+  padding: 3% 3%;
+  height: 100%;
+  color: #FBFFEE;
+}
+
+
+/* 箇条書き*/
+ul li {
+  line-height: 2
+}
+
+/*フッター*/
+footer{
+  background-color: #191919;
+  margin-left: -4%;
+  margin-right: -4%;
+  margin-bottom: -9%;
+  margin-top: 2%;
+}
+
+/*画像サイズ調整*/
+img {
+  max-width: 60%;
+  height: auto;
+}
+
+pre {
+  max-width: 100%;
+}
+
+/*~へ行く*/
+.goto {
+  text-align: center;
+  max-width: 100%;
+  margin-left: -4%;
+  margin-right: -4%;
+  padding-left: 25%;
+  padding-right: 25%;
+}
+
+/*テーブル*/
+table {
+  border: 1px solid #ddd;
+  width: 100%;
+  text-align: left;
+}
+td, th {
+  padding: 2px 2px;
+  text-align: center;
+}
+thead tr {
+  background-color: #191919;
+}
+thead tr th {
+  color: #1B73BA;
+  text-align: center;
+}
+tfoot {
+  border-top: 1px solid #ddd;
+}
+tbody tr th {
+  font-weight: bold;
+  font-family: 'Noto Sans JP', sans-serif;
+}
+tbody tr:nth-of-type(2n) {
+  background: #191919;
+}
+
+.table {
+  padding-left: 5%;
+  padding-right: 5%;
+}
+
+/*リンク*/
+a {
+  text-decoration:none;
+  color: #6EDEFF;
+}
+a:hover {
+  text-decoration:underline;
+}
+
+a:visited {
+  text-decoration:none;
+  color: #6EDEFF;
+}
+
+/*pullreq by ek*/
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..18508f9
--- /dev/null
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>はやおのぺーじ</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/modern-css-reset/dist/reset.min.css">
+
+
+    <style>
+
+        /* カラーパレット: https://colordrop.io/ */
+        html{
+            background-color: #17223b;
+            color: #fff7f7;
+        }
+
+        body{
+            margin-left: 4vw;
+            margin-right: 4vw;
+            height: 100%;
+        }
+
+        /*
+        header,main{
+            max-width: 1100px;
+            margin: 0 auto;
+        }*/
+
+        header h1, .header-description{
+            display: inline-block;
+        }
+
+        .box{
+            cursor: pointer;
+            display: flex;
+            /* margin-top: 5vh; */
+            padding: 3vh;
+            justify-content: center;
+        }
+
+        main, header{
+            padding-top: 3vh;
+            /* padding-left: 3vw; */
+            /*padding-right: 3vw; */
+
+        }
+
+        .service-name{
+            color: #08ffc8;
+            text-align: right;
+        }
+
+        .service-description{
+            margin-left: 3vw;
+            /* text-align: right; */
+        }
+
+        .box-container{
+            /* width: 100vw; */
+        }
+
+        /*
+        @media screen and (max-width:999px) { 
+            main, header{
+                margin: 0;
+            }
+
+            body{
+                margin-top: 2vh;
+                margin-left: 0.1vw;
+                margin-right: 0.1vw;
+            }
+        }
+        */
+
+
+    </style>
+
+    <script>
+        const SetStyle = function(){
+            // リンクを作成
+            Array.from(document.getElementsByClassName("box")).forEach(element => {
+                element.addEventListener("click", function(){
+                    var link = element.dataset.link
+                    if (link){
+                        location.href = link;
+                    }
+                    
+                });
+            });
+
+            // 横幅を設定
+            // 参考: https://gray-code.com/javascript/get-max-value-and-minimum-value-in-array/
+            var MaxWidthList= [];
+            ["service-name", "service-description"].forEach(className => {
+                var WidthList = [];
+                Array.from(document.getElementsByClassName(className)).forEach(element =>{
+                    WidthList.push(element.clientWidth);
+                })
+
+                var MaxWidth = WidthList.reduce(function(a,b){
+                    return Math.max(a,b);
+                });
+                MaxWidthList.push(MaxWidth);
+
+                Array.from(document.getElementsByClassName(className)).forEach(element =>{
+                    element.style.width = MaxWidth + 5 + "px";
+                })
+            })
+            console.log(MaxWidthList)
+
+            // 中央の空白を設定
+            /*
+            var ServiceNameMaxWidth = MaxWidthList[0];
+            var ServiceDescMaxWidth = MaxWidthList[1];
+            var BoxWidth = Array.from(document.getElementsByClassName("box-container"))[0].clientWidth;
+            var CenterBlank = BoxWidth - ServiceDescMaxWidth - ServiceNameMaxWidth;
+            console.log(ServiceDescMaxWidth);
+
+            Array.from(document.getElementsByClassName("service-name")).forEach(element => {
+                if (CenterBlank > 0 ){
+                    //element.style.marginLeft = CenterBlank + "px";
+                };
+            });
+            */
+        };
+
+        window.addEventListener("load",SetStyle);
+        window.addEventListener("resize",SetStyle);
+        //window.addEventListener("resize", function(){location.reload();});
+    </script>
+</head>
+<body>
+    <header>
+        <h1>ハヤオのトップページ</h1>
+        <div class="header-description">
+            <p>ハヤオが開発したいろんなサイトへのリンクをまとめているトップページです。</p>
+        </div>
+    </header>
+    <main>
+        <div class="box-container">
+            <div class="box" data-link="/alter/index.html">
+                <p class="service-name">Alter Linux Alpha Release</p>
+                <p class="service-description">Alter Linuxの限定公開ビルドをダウンロードできるサイト。TailWind CSS最高。</p>
+            </div>
+            <div class="box" data-link="/buildmydist/index.html">
+                <p class="service-name">【2019年版】Ubuntu系のOSを自作しよう(旧版)</p>
+                <p class="service-description">昔のハヤオが作ったUbuntu18.04の派生OSを開発するためのサイト。黒歴史。</p>
+            </div>
+            <div class="box" data-link="/buildmydist-2/">
+                <p class="service-name">オリジナルLinuxディストリを自作しよう2</p>
+                <p class="service-description">いろいろなOS派生のディストリビューションを開発するためのサイト</p>
+            </div>
+            <div class="box" data-link="/alteriso-options-generator/index.php">
+                <p class="service-name">AlterISO3 ビルドオプション ジェネレータ</p>
+                <p class="service-description">AlterISO3のビルド設定を行うツール。初めてJSを使った。</p>
+            </div>
+            <div class="box" data-link="https://hayao0819.github.io/web-notepad/index.html">
+                <p class="service-name">Web NotePad</p>
+                <p class="service-description">初めて作ったウェブアプリ。LocalStorageにデータを保存する。タブ機能有り。</p>
+            </div>
+            <div class="box" data-link="/sanmoku">
+                <p class="service-name">三目並べ</p>
+                <p class="service-description">プレーヤーの人数やマス目を自由に設定できるおかしな三目並べ</p>
+
+            </div>
+            <div class="box" data-link="/sleep/index.php">
+                <p class="service-name">n秒後に反応するサイト</p>
+                <p class="service-description">ウェブのタイムアウトなどを検証するためにあえて遅延させるサイト。</p>
+            </div>
+            <div class="box" data-link="/tatebou/index.html">
+                <p class="service-name">迫真縦棒ドメイン短縮URL</p>
+                <p class="service-description">山Dの迫真縦棒ドメインの短縮URLを作成するウェブサイト。</p>
+            </div>
+
+        </div>
+
+        <div class="box-container">
+            <div class="box" data-link="https://twitter.com/Hayao0819">
+                <p class="service-name">Twitter</p>
+                <p class="service-description">ハヤオのすみか</p>
+            </div>
+            <div class="box" data-link="https://github.com/Hayao0819/">
+                <p class="service-name">GitHub</p>
+                <p class="service-description">ハヤオが書いたどうでもいいソースコードの置き場</p>
+            </div>
+        </div>
+    </main>
+</body>
+</html>
\ No newline at end of file
diff --git a/keybase.txt b/keybase.txt
new file mode 100644 (file)
index 0000000..0fe8647
--- /dev/null
@@ -0,0 +1,56 @@
+==================================================================
+https://keybase.io/hayao0819
+--------------------------------------------------------------------
+
+I hereby claim:
+
+  * I am an admin of https://hayao.fascode.net
+  * I am hayao0819 (https://keybase.io/hayao0819) on keybase.
+  * I have a public key ASC42tnWrD1OwocpgNilOtwZsq-AMkj-DBgraXi7RegqiAo
+
+To do so, I am signing this object:
+
+{
+  "body": {
+    "key": {
+      "eldest_kid": "01205185505bcc6d4e44243b8ad9fef43d0f02f409283565478cf71f1eff99d59aba0a",
+      "host": "keybase.io",
+      "kid": "0120b8dad9d6ac3d4ec2872980d8a53adc19b2af803248fe0c182b6978bb45e82a880a",
+      "uid": "eb88a8be319a9a4083f689b2bedfc219",
+      "username": "hayao0819"
+    },
+    "merkle_root": {
+      "ctime": 1616733972,
+      "hash": "c18558ccf2c09e1dcc13f7fc7f76a338246edf95418b9aa385b799e8bbaa6f59bf3efaf88f8370778a1543ed4a04e1c8746c32b49eb9b1c3722c860256d2dbb7",
+      "hash_meta": "956312b1fce650036c04040569d5fcd997fabd8802e560ee340a27e3e219aa62",
+      "seqno": 19472959
+    },
+    "service": {
+      "entropy": "y5LHxJdojYh7GjkZ3KipIpws",
+      "hostname": "hayao.fascode.net",
+      "protocol": "https:"
+    },
+    "type": "web_service_binding",
+    "version": 2
+  },
+  "client": {
+    "name": "keybase.io go client",
+    "version": "5.6.1"
+  },
+  "ctime": 1616734028,
+  "expire_in": 504576000,
+  "prev": "bf856894e14d55f952240ac0f178d9672dfb14efedd23fef9ea5be7797b54304",
+  "seqno": 12,
+  "tag": "signature"
+}
+
+which yields the signature:
+
+hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEguNrZ1qw9TsKHKYDYpTrcGbKvgDJI/gwYK2l4u0XoKogKp3BheWxvYWTESpcCDMQgv4VolOFNVflSJArA8XjZZy37FO/t0j/vnqW+d5e1QwTEIP13UIF3gQ8jcX2zrDWN3nWAJQ94x4ldX69as0PHYfh8AgHCo3NpZ8RAHDTCv47PnQ53B7gN2NJHjHGmJrfBw6H8UWveEfk1cGgUI/nC1SvATBuZL5SDEH2Gi/oWswuLPc63kgsNGhRxD6hzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIMQISbBO0KIkzxJIb+HeVoVcQgMziLt363KrxlfaXMafo3RhZ80CAqd2ZXJzaW9uAQ==
+
+And finally, I am proving ownership of this host by posting or
+appending to this document.
+
+View my publicly-auditable identity here: https://keybase.io/hayao0819
+
+==================================================================
diff --git a/old.html b/old.html
new file mode 100644 (file)
index 0000000..54ba241
--- /dev/null
+++ b/old.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>はやおのぺーじ</title>
+    <style>
+        a{
+            text-decoration: none;
+            color: blue;
+        }
+    </style>
+</head>
+<body>
+    <main style="text-align: center;">
+        <h1>はやおのぺーじ仮</h1>
+        <p>各ページへのリンクです</p>
+        <ul style="list-style: none;">
+            <li>
+                <a href="./buildmydist/index.html">【2019年版】Ubuntu系のOSを自作しよう(旧版)</a>
+            </li>
+            <li>
+                <a href="./buildmydist-2/">オリジナルLinuxディストリを自作しよう2</a>
+            </li>
+            <li>
+                <a href="./alteriso-options-generator/index.php">AlterISO3 ビルドオプション ジェネレータ</a>
+            </li>
+            <li>
+                <a href="https://hayao0819.github.io/web-notepad/index.html">ウェブで動くメモ帳</a>
+            </li>
+            <li>
+                <a href="./sleep/index.php">n秒後に反応するサイト</a>
+            </li>
+        </ul>
+    </main>
+</body>
+</html>
\ No newline at end of file
diff --git a/qiitacli/index.html b/qiitacli/index.html
new file mode 100644 (file)
index 0000000..eea18bd
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <meta charset="UTF-8">
+    <title>認証成功</title>
+</head>
+<body>
+    <header>
+        <h1>Qiita OAuth 認証成功画面</h1>
+    </header>
+    <main>
+        <p>認証に成功しました。</p>
+        <p>以下の文字列をターミナルに貼り付けてください。</p>
+        <div>
+            <p>Access Token <button onclick="TokenCopy()">コピー</button></p>
+            <p><input type="text" name="token" id="token_box" readonly></p>
+        </div>
+        <div>
+            <p>State <button onclick="StateCopy()">コピー</button></p>
+            <p><input type="text" name="state" id="state_box" readonly></p>
+        </div>
+    </main>
+    <script>
+        // GETパラメータからrとeの値をそれぞれ取得する
+        const GetParams = () => {
+            let ParamsArray = {
+                state: undefined,
+                token: undefined,
+            };
+            let searchParams = new URLSearchParams(document.location.search.substring(1));
+            ParamsArray["token"] = searchParams.get("code")
+            ParamsArray["state"] = searchParams.get("state")
+            return ParamsArray;
+        }
+
+        window.addEventListener("load", ()=>{
+            document.getElementById("token_box").value = GetParams()["token"]
+            document.getElementById('state_box').value = GetParams()["state"]
+        })
+
+        // コピーボタン
+        const CopyToClipBoard = (e) => {
+            e.select();
+            document.execCommand("copy");
+        }
+
+        const TokenCopy = () => { CopyToClipBoard(document.getElementById("token_box")); }
+        const StateCopy = () => { CopyToClipBoard(document.getElementById("state_box")); }
+    </script>
+</body>
+</html>
diff --git a/sanmoku/Todo.md b/sanmoku/Todo.md
new file mode 100644 (file)
index 0000000..f0df184
--- /dev/null
@@ -0,0 +1,4 @@
+ - [これ](https://note.com/shimakaze_soft/n/n5866efc58b3c#lcDDy)を使って勝敗判定を実装する
+ - 横幅、縦幅を変更可能にする
+ - 見た目をもうちょっといい感じにする
+
diff --git a/sanmoku/flowchart.html b/sanmoku/flowchart.html
new file mode 100644 (file)
index 0000000..b0bf1b2
--- /dev/null
@@ -0,0 +1,12 @@
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><![endif]-->
+<!DOCTYPE html>
+<html>
+<head>
+<title>flowchart.html</title>
+<meta charset="utf-8"/>
+</head>
+<body>
+<div class="mxgraph" style="max-width:100%;border:1px solid transparent;" data-mxgraph="{&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;resize&quot;:true,&quot;xml&quot;:&quot;&lt;mxfile host=\&quot;app.diagrams.net\&quot; modified=\&quot;2021-10-08T08:16:56.541Z\&quot; agent=\&quot;5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\&quot; etag=\&quot;Qyl0JX3lmr4w61HYsQpk\&quot; version=\&quot;15.4.3\&quot; type=\&quot;device\&quot; pages=\&quot;2\&quot;&gt;&lt;diagram id=\&quot;s89m_YFMkeuFDUxKmkmU\&quot; name=\&quot;Page-1\&quot;&gt;7V1Zc9s2EP41eIyH9/FISnKbjNNp6860eerQEiUxpUSVomK5v75YEOAFiERsiYfbTCYhQRIidr9vsbs4iPTZ7vxDGhy2n5NVGCNNWZ2RPkeaphqahuCvsnrJS2zdyQs2abSiN5UFj9E/IS1UaOkpWoXH2o1ZksRZdKgXLpP9PlxmtbIgTZPn+m3rJK7/6iHYhFzB4zKI+dLfo1W2zUsdzS7LfwyjzZb9smq5+ZVdwG6mLTlug1XyXCnSF0ifpUmS5Ue78yyMQXhMLvlz9xeuFi+WhvtM5gHLsZ/SffwQf8p+Wh3tP2eb7ekDE/O3ID7RFtO3zV6YCMIVlgg9TdJsm2ySfRAvylI/TU77VQi/o+Cz8p6HJDngQhUXfg2z7IWqNzhlCS7aZruYXuXbQpt3TE7pkr7Hdj5ffly/fNLU3ceH8/r8ef3L8gPDRJBuwqyloVQr0JbKD1BJ/RAmuzBLX/ANaRgHWfStrv2AgmhT3FfKGR9QUYvF3vbWFalHWIDnOyKShY4cDbkaWjjI85A3pyUO1pUV40b6Tyk+2sARWtwjf4YcBy0s5C6Qp6CFjXwTOQZ5SkX+faVCA/lz5M5YhcXjLqf0UqWgn+dtlIWPh4Co4hkzXVJ938I0C8+tAqdXTQpEaiZUnZ4/l6RTGZO2FcJZyo1U5EycGBpPjDYojoQYGi/1hYtci2DVRJ4NB5exqgyBVbNHqIqN+MShqktCVXNGhVWdE/sqXEf78O7rUWSohVY9t88O8hdgh0s7Py5rrLlDW2Nt6hg3JTFujQriZhvEB7bCRYjw0jgfDKTq1H0GS9ZnGJfTYAmcBmxJdXCIc5Pqu+AWuz7yWAn1j/E9Nj3wZvTAZweeUS9RwXDTA5cdLIhBd4hBN+HU9QY33xw1hrffk48zBYGm+MaRRZp8x/npEZAKrgeLET37x98+P1QQ7RL4O3CfSwpL7wU/eQ8OOT7ATotrjw7suj002FU+iiHy1axgB+3fPx0PpO2KZFEufc9iB8xkuawEB/z0EjNZkBEo1GlCzO/eU+X5CqnTImGVTazWnJnB3DC2qB9fwpXMSZZhDpU31Y+1ltV1HMTRZo+Pl1jHYYoLQLfRMog9emEXrVY5v8Nj9E/wRKoChh+SaJ8R7Zg+MudQF6b0MWc3VH3M0uSvcJbECa53vk/24ZX8X62OKYuHlK4IIKXdDFJ8sMFijOMh2NdUYP19gpyiD5r4QIWP+yQlDtdZeZUFJrPHx9cDky9qGBIHUOv4tAQgWO+Gc4uS95oAqQX0rLRhWFB522gE9U6RpteQVliqCtS0fqFm3Apqn4JvweMyjQ5ZxajdM2fLY5ZLr19SmW3K8ZNDi1k3Z14zc9icgZXEGFOQY7U6bSbA0jXLev7LqBP4h5rTK+h4H76CFqq1e/BcqvrX4C90UmrpovsMWU7htDMgUJ9fE+UQ36VaVUG/VbhL/ejV5Y0JpqfjId8CF8QxWe9QeJcOcufEOylclhl4Km1DH7ndYG5K4R4JLInZBIfL7I87u/BUHj0WdsOCSijIlPJHfRZzltGjUnmKb/JVBl7WURxfH0ZNj9oYPMMt8n6mFD2yzHXnMCVt10iCR41PaEX7KIPsX3/p7Ntg3BwwaBRqnk+1TgziLg9x8bCJMi6M8z0Uw/hl2EpkuG8D2wKnQyS9hbgVJF8nhVsGx27cjivpzd67IviPGLdRjEX0G3FG28Yg+Zh7fCaaw/rgWWydT6Yy79Gru3/YIXS6usa8hGgC3FED+R4JWrGH6ZLAJvce/YZam0oktXoq1DEBJQ7f0QqcmiEs1jrZZ/Siqr3NgmmyFkwflwXj0+RNCza+DtjUx2aUTL4jmFgPLDv/xxjX5AhdEJVCf0py3vnwCmQOTEhGumolGdA+Ns2nGdQyl0Dr0XG30Mw3CIbi8jwTm7es1RV23AYHuG933sDU7bt1nDwvt0Ga3cVY53/G0S7KLrDsRtQyJLoKUSr8dv29IBXeoeELmqGTcrWymx9QV6soDZdZlEAS8zk8ZrdRn6qITGOv+jN5MfdgCbEI05c/4Pk7k51+odWRk/m5dvZCz95gQWVjb2NcsbfOx95AK4/4ze/agtY9837sqSnKFfTLR17Ao/ZMDNncgDGu3IAhcAllRzkaC0UsMiAzzhSuYdbx7Zocvl0BvI1bwdtSOTH10d2co6zS2+CzL5UrZV8DJ6yr6b+LYgzpppI2LipdTvnIDBj6jErFwKNG0zUwhG3DfC2fTU8opjkUExYcYwq8swSjzP3yTv+fd1106ubduJJD7L2bvFPY0L3k1KFLA/4KmzqU93e05nUQH8P6dZU5iiqkZS/OHxkhL23BVDIRL+2b8dKcIi8Vo8rMD8qdoqsd9CRnP4dphOUGU4XeylnphJgxLs6KEmImdHAwJYfEdW7Vybzuuol+SOUIgqh+O7tBYqg3k0qtkkrFnOqZUoYspcxxUUqUgfyuSI6NDZZ9mQPjjj6hneNBYmQKtBPkgvulnTMe2inttMMnTeJUqajazf4NFNErGWUXwxr2uMgomKPVka78fzigmGIu2tGj3+zjMO7oK0O+a3NOdm0vy8mPhXOixb3VPm26+UrRtOp++zR+2tcEXMmaI9kziWxZEo0sMLOlSGQjF/PIJzvuzJGnVXxGC+7Mp6s5OFrjLekI+aUqkgmQmxHMltm1ZL/yYJ+6UhQyQ1edwKo02RQ0mZVJ44/+ws+wtKkUudXs5M2GKHNK0adKafIVuR0V5ZTjKiJqKZr9Bk0J0o3vS1NdAn6tpswme26tKZm1QKWmlnFwPEbLaSuLk7G0sppTAPpWlmgt8buiVXPSk6q+UlW23lXTrXUlswJpyrrqlvBrdWUoPatKZtFNhw0sXOpaZrbiX1/Fpb7enPRhMMJpVtrymr1BRLwn5ITWZbWthO1cMasOlrBve+2K2HdBtH+HK2aHXxQu3KhkShCXXjE7KoTzc3ZhCyFZdJOS8aN7+HW1U9pMstUwd1vwwUZ5Wt+7IvivJ/xqOyyBd2jHTZ2fNdvzgswJLWBrBXA30gcbW2l975suZ25qko1dZuS/Lgr0sk6iTghLkDUWEkJtuvTXYwTvRU6MEQLXRtzSwRZOtL735SXJ37H6fnzQtgf32YsmNFZU1idD1Hb2et1EX63cddIvVoXZdNdaxyTzNlyivu6NuIZbbF5Xn2MMrj7RdDSZboFXRGWdHha+Q0YdvequjY5oQ0cT/gX1Efb5vNb4ffwEqpHf2k9i7V65j4Oms3P6PnB9A8k3CqLjX2G23LIT9j2o1gTad+zaxuYKshCGB4tuCMByjb3/xGDh3YvGV45Uwl+y1R/2lcvN/9iws2AHm+JjMPkCGf8C6/XSIHjFvoBsb2SPn77fQe/mhKun4Bgt7wgQfg2X2SyI4+QEL0g+fKaCRskHz8jOHnTjR0isPuXQeXgSdwI1SFwETnPnkPpukgh2JoY/N7NKxXa0xTi7wCyJcrSvMEv4tPxCWp4bLb8zpy/+BQ==&lt;/diagram&gt;&lt;diagram name=\&quot;Page-2\&quot; id=\&quot;Fur2vRH3D3bimBpfmG0a\&quot;&gt;7Vxbc5s4GP01euwOSFwfwZftdtNpN97ZNn2jtmKzxcbBSuz016+EJEAgEtIEHDs7k0nhA8TlnPPdpBSg0frwexZtVx/TBU4ANBYHgMYAQt/y6G9muOcGy4fcsMziBTeZpWEW/8TCaAjrbbzAO+VEkqYJibeqcZ5uNnhOFFuUZelePe06TdS7bqMlbhhm8yhpWr/EC7LiVg+6pf09jpcreWfT8fmRdSRPFm+yW0WLdF8xoQlAoyxNCd9aH0Y4Yd9OfpfLGwI/e1eX1x/j+/Xq7ubHt7/sd3yw6VMuKV4hwxvyskNbfOi7KLkV30u8K7mXHxAv6PcUu2lGVuky3UTJpLSGWXq7WWB2G4PuledcpOmWGk1q/BcTci/IEd2SlJpWZJ2Io/ye7EY1zB55YXHeLr3N5viB8+wCLcpynK4xye7pdRlOIhLfqTeNBN+WxXnFpZ/TmD4ONA6SKoIYQhkmMtQhSJQtMRFXlcjQjcpjlKYcrydgZzexmyDgIeBP8g0IQh9MXOCHIOAWE3gjcSiYipODQGzQH+WQCXxbWMRV1CIPBZ4ccNwgjEqH/SomeLaNcoD21MXooL/DGcGHXwC/CaoYxVaxkbv70gWYUterivwdo50FCn5PBctsKu393x8vAHSiNfskm++7bf45jI4mgZUjN1wJvrSEEr3AkghL0BgdbOCPcjxt4E1BaORjOuxyz2XGYAx8V+JPR/Bzsnj5hfkg/BCNBuyQzYhAuRaO2eB1RlBsiQp7lMTLDd2eU4xxRg2MATH12oE4sI4XC+5c8C7+GX3Ph2J82jI55ejYIbDHbCzqT3bctbChdyRLf+BRmqR03PEm3eA+aQZVnjlNniFDwzPYG880XgE6Cfv8u220UXBxbm5Z7AoZPO8EIgE9I8HXpDxKt5bs39Fs9utsbZpy9pd09BiVvbDiZ6qOi/PMZrt+kPNsAgJfvhj9UPzd+IO+KfohNQTBJv/gsPxz+uLfh+gums2zeEsq7q9LFHMfCl5Vh0gdH/OnlHgG8Bx5KJAbvnpyKOMjD4L/U1Gloq9hojcoE90GEysUElBOP8xUUkD2w2KcCUKZ9YSSbkUeFEh2eJY89JaxNjVhrygABwHb0bgdFlMClscIFKfMQgNHiat0CKFMjwO3onEaj/w8JPkgqDoET+crbPabpkE8SIV+BzZcx0lSA6w7QXRpdZl458OnGyIqLgqX2BfPw44vk2i3E/Ta/cBkvpI7ss41eqQQtCyFQprAhayeGLQM/tlbX8eLi+k4GKFLg6zJH/rE6aRL4U+rkfHnJ/jlylpeBpvIdC/2SPQIDF6aPvQ5LD18nWvmrmA89JT10pYWNbLGFSJGTJqlZF3gBSB0cu3mIVqE5e9ZEZFZ8mjnTt4CYVDKukgTOvl2qpEt21zhQ0QBZh4aZzF9eaZaaf0sTfDxOvg6PmDZPRuwLi56Fo8Wxi8AtZZoGqiPIDt8iMnXyvYVG+o3W+yND2LkfOdecY09S/XFu1YNBvg1j8qfq9G1ara//NpAdYq8XPtLSxyo8REWa0CUbSvY0HZQaru9bWUer23V+KjI7KjPvuIi0rtisyywNN+ymexo89MeM6A+cxfTqoEkc4cKSI4Go3p/+OVyF+9VONEXdIgP5CRdkhd3oOTlwcfUNOZl0lLvUvBWPZdVmLsxj/0IfcmuWFikOjIz8aFqMVnd2pq0POLTVAc4UAJSlIlHc3C6jpWSAFY3vA6ubugqX+NFe/N89SkvTZfHHrJqg68jfezd87ldPZ9/VM/XbLk9xfPpCjjFzxmyA1eZgComvpSRHeY+i/ku0egxKg3fYqbBPzF/qVHcsP5SKuzcJed3lBxswW8gyfltkntEIdq5ESQtCARSaWWnxVItUrG03mJ1FZ9HdlXFds95PNZYZc3aYpbvJPWJ3KPr8+zW9Dwguy76RMfUpxxYExK7K62Y/rbYlARbpRGC0DpRhVhDrsXRY6Kboz5DhaCuCnnu+rjnoaHrMPH59XHOdTuXis3SOSaManzgwqB2s5yb9ZyTkIHdufPemwzeRtcI2l1lcNSuEdQt53TyxInPKhsgrC66K4JAvmavaA0p0aA5+TVlIUXURR1TxLZFoN2LulzDxSIKEcqguryweHj+hM3589eoYefozSv0RpK9rv0PdNxkT9f/eKaGT0EGR+9JoLeR0aGuGR06akaHWjI6u1x5WSyyEAt8uwWTrt2/9sBVJ8W5rONwO7cd+gLd0hS65yjBrtmk9dzlG8+ToC6bbFn5xESZl1Bsw2U1Vngy3bf6egmqg9+ak/EDB6OWWZCnLpk453nEuvvSLCAedPWnvNnzVxxqJqy0ujvJyai63Lwhe3nBN//m5wyhiTs6fAqyq+VsvNStAjvtqKN9y36WAqIamtDsbQVf+1v10xqvc+BV/E0qQur3HnRxnxYBTaQ6Q/Voqibtec5AGZv25pp53DcMhXdMKHTlq8MKVBq0qasJJ5U/BJs83WVV/szIg+0B/2RL07qbK8LKELVpu7DbAfW8fKrpOYDqFjC8ygzOctw6OEMWTO1ib8BDv3tgHh2VwUTi95cL0N3yf6nhyVv5X/2gyX8=&lt;/diagram&gt;&lt;/mxfile&gt;&quot;,&quot;toolbar&quot;:&quot;pages zoom layers lightbox&quot;,&quot;page&quot;:1}"></div>
+<script type="text/javascript" src="https://app.diagrams.net/js/viewer-static.min.js"></script>
+</body>
+</html>
diff --git a/sanmoku/index.html b/sanmoku/index.html
new file mode 100644 (file)
index 0000000..285e096
--- /dev/null
@@ -0,0 +1,79 @@
+<!-- このファイルで土台を作成する -->\r
+\r
+<!-- 最初に設定するいろいろなこと -->\r
+<!DOCTYPE html> \r
+<html lang="ja">\r
+\r
+<head>\r
+    <meta charset="UTF-8">\r
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">\r
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">\r
+\r
+    <!-- ウェブサイトのタイトルを設定 -->\r
+    <title>まるばつゲーム</title>\r
+\r
+    <!-- 見た目を書いたファイルを読み込む -->\r
+    <link rel="stylesheet" href="./style/common.css">\r
+</head>\r
+\r
+<!-- ここから実際のゲーム画面 -->\r
+<body>\r
+    \r
+    <!-- 画面の上に表示されているタイトル -->\r
+    <header id="header">\r
+        <h1>まるばつゲーム</h1>\r
+        <p>ウェブサイトで動く簡単なまるばつゲームを作ってみました</p>\r
+    </header>\r
+\r
+    <!-- 本文 -->\r
+    <main id="main">\r
+        <!-- リセットボタン -->\r
+        <form>\r
+            <input type="button" value="リセット" id="reset">\r
+        </form>\r
+\r
+        <!-- ゲーム本体 -->\r
+        <table id="maintable"></table>\r
+\r
+        <!-- メッセージが表示される場所 -->\r
+        <p id="msg"></p>\r
+\r
+        <!-- 現在の設定 -->\r
+        <p id="currentconfig"></p>\r
+\r
+\r
+        <!-- 設定 -->\r
+        <h2>設定</h2>\r
+        <form>\r
+            <table>\r
+                <tr>\r
+                    <td>縦方向のマス目の数</td>\r
+                    <td><input type="number" id="inputtablex"></td>\r
+                </tr>\r
+                <tr>\r
+                    <td>横方向のマス目の数</td>\r
+                    <td><input type="number" id="inputtabley"></td>\r
+                </tr>\r
+                <tr>\r
+                    <td>プレーヤーの人数</td>\r
+                    <td><input type="number" id="inputplayernumber"></td>\r
+                </tr>\r
+            </table>\r
+            <input type="button" value="適用" id="apply">\r
+        </form>\r
+        \r
+    </main>\r
+\r
+    <footer id="footer">\r
+\r
+    </footer>\r
+\r
+    <!-- ゲームの動きなどを書いたファイルを読み込む -->\r
+    <script src="script/define.js"></script>\r
+    <script src="script/init.js"></script>\r
+    <script src="script/main.js"></script>\r
+    <script src="script/judgement.js"></script>\r
+\r
+</body>\r
+</html>\r
\ No newline at end of file
diff --git a/sanmoku/script/define.js b/sanmoku/script/define.js
new file mode 100644 (file)
index 0000000..7d17c99
--- /dev/null
@@ -0,0 +1,57 @@
+// 横のマス目の数\r
+var TableXNumber = 3;\r
+\r
+// 縦のマス目の数\r
+var TableYNumber = 3;\r
+\r
+// マス目の初期値\r
+var InitialStr = " ";\r
+\r
+// プレイヤーの記号\r
+var PlayerMarks = ["◯", "✗" , "△"];\r
+\r
+// プレイヤーの人数(現在 2のみ指定可能)\r
+var PlayerNumer = 2;\r
+\r
+// 現在のプレイヤー\r
+var CurrentPlayer = 0;\r
+\r
+//// 以下プログラム用の変数定義につき変更禁止\r
+\r
+\r
+// Main\r
+var Main = document.getElementById("main");\r
+\r
+// HTML\r
+var HTML = document.getElementsByName("html")[0];\r
+\r
+// メインテーブル\r
+var MainTable = document.getElementById("maintable")\r
+\r
+// メッセージを表示する場所\r
+var Msg = document.getElementById("msg");\r
+\r
+// 現在の設定を表示する場所\r
+var CurrentConfig = document.getElementById("currentconfig")\r
+\r
+// リセットボタン\r
+var ResetButton = document.getElementById("reset");\r
+\r
+// 適用ボタン\r
+var ApplyButton = document.getElementById("apply");\r
+\r
+// 設定フォーム: 縦のマス目\r
+var InputTableX = document.getElementById("inputtablex")\r
+\r
+// 設定フォーム: 横のマス目\r
+var InputTableY = document.getElementById("inputtabley")\r
+\r
+// 設定フォーム: プレーヤーの人数\r
+var InputPlayerNumber = document.getElementById("inputplayernumber")\r
+\r
+// チェック済みのボックスの数\r
+var CheckedBox = 0;\r
+\r
+// ゲームが終了してるかどうか\r
+// これがtrueの場合はクリックしてもマークをつけない\r
+var GameEnded = false;\r
diff --git a/sanmoku/script/init.js b/sanmoku/script/init.js
new file mode 100644 (file)
index 0000000..070a719
--- /dev/null
@@ -0,0 +1,36 @@
+// 初期化をする関数\r
+var InitilizeTable = function() {\r
+    MainTable.innerHTML = "";\r
+    for (y = 0 ; y < TableYNumber; y++){ // 行を作成するループ\r
+        \r
+        // 行を作成する\r
+        var tr = document.createElement("tr")\r
+\r
+        // 先程作成した行の中で横並びのボックスを作る\r
+        for(x = 0; x < TableXNumber; x++){\r
+            // ボックスを作成\r
+            var td = document.createElement("td"); \r
+\r
+            // ボックスの設定\r
+            td.innerText = InitialStr; // ボックスの文字を初期化する(空白に設定する)\r
+            //td.dataset.clicked = false; // ボックスの状態を「クリックされていない」にする\r
+            td.setAttribute("data-clicked", false); // ボックスの状態を「クリックされていない」にする\r
+\r
+            // 座標を設定\r
+            //td.dataset.x = x; // X軸方向が同じグループを作成\r
+            //td.dataset.y = y; // Y軸方向が同じグループを作成\r
+            td.setAttribute("data-x", x)\r
+            td.setAttribute("data-y", y)\r
+            td.setAttribute("id",  x+ "," + y) // ボックスIDを座標名で設定\r
+\r
+            // ボックスを表示\r
+            td.addEventListener("click", ClickedBox) //ボックスがクリックされた時「ClickedBox」関数を実行する\r
+            tr.appendChild(td) //行に先程作成したボックスを挿入する\r
+        }\r
+        MainTable.appendChild(tr) //完成した行を画面に挿入する\r
+    }\r
+}\r
+\r
+// 初回読み込み時に初期化を行う\r
+window.addEventListener("load", InitilizeTable)\r
+\r
diff --git a/sanmoku/script/judgement.js b/sanmoku/script/judgement.js
new file mode 100644 (file)
index 0000000..9e28763
--- /dev/null
@@ -0,0 +1,119 @@
+// 配列の重複した値が指定回数以上ならTrueを返す
+// 使い方: CountArrayValue(配列, 回数)
+// 参考: https://teratail.com/questions/98451
+//      https://teratail.com/questions/352619
+var CountArrayValue = function(array, number) {
+    var count = {};
+
+    //for (var i of array) {
+    //   count[i] = (count[i] || 0) + 1;
+    //    if (count[i] == number) return true;
+    //}
+
+    for (i=0; i<array.length; i++){
+        count[array[i]] = ( count[array[i]] || 0 ) + 1;;
+        if (count[array[i]] == number) return true;
+    }
+    return false;
+}
+
+
+
+// 勝敗の判定 ジャッジメントですの!
+var Judgement =function() {
+    // プレーヤーごとに判定
+    // プレーヤーIDでループし、変数pに今チェック対象のプレーヤーIDが代入される
+    for (p=0; p < PlayerNumer; p++){
+        // チェックしたプレーヤーのIDが書き込まれたボックスの一覧を取得
+        var elements = MainTable.querySelectorAll("[data-player]");
+
+        // 今チェック中のプレーヤーのチェックしたボックスの座標
+        CheckedByCurrentPlayerX = []; // X軸方向のチェックしたボックスのリスト
+        CheckedByCurrentPlayerY = []; // Y軸方向のチェックしたボックスのリスト
+        CheckedbyCurrentPlayerD = []; // 斜め方向のチェックしたボックスのリスト
+
+        // 上で取得したボックスの一覧1つ1つで確認処理を行う
+        //elements.forEach(function(e) {
+        for(i=0; i<elements.length; i++){
+            var e = elements[i];
+            //if (e.dataset.player == p){ // もしいま確認しているボックスが今確認しているプレーヤーIDと一致したら
+            if (e.getAttribute("data-player") == p){
+                //console.log(e)
+                // チェックされているボックスの座標を座標リストに追加する
+                //CheckedByCurrentPlayerX.push(e.dataset.x);
+                //CheckedByCurrentPlayerY.push(e.dataset.y);
+
+                CheckedByCurrentPlayerX.push(e.getAttribute("data-x"));
+                CheckedByCurrentPlayerY.push(e.getAttribute("data-y"));
+            }
+        };
+
+        // 勝利時に実行する関数
+        var WinExit = function(text){
+            Msg.innerText = p + "が" + text + "で勝ちました"
+            GameEnded = true;
+            return;
+        }
+
+        // X座標の確認
+        if (CountArrayValue(CheckedByCurrentPlayerX, TableYNumber)){
+            // チェックした値がX座標で一致した→すなわち縦方向がそろった
+            WinExit("縦方向");
+            return true;
+        }
+
+        // Y軸方向の確認
+        if (CountArrayValue(CheckedByCurrentPlayerY, TableXNumber)){
+            // チェックした値がY座標で一致した→すなわち横方向がそろった
+            WinExit("横方向");
+            return true;
+        }
+
+
+        // 斜め方向の判定
+        if (TableXNumber == TableYNumber){ // 正方形の場合のみ (X軸とY軸の大きさが一致)
+
+            // 左上からの斜め方向の判定
+            {
+                for (i=0; i<TableXNumber; i++){
+                    var e = document.getElementById(i + "," + i)
+                    if (e.getAttribute("data-clicked") == "true" && e.getAttribute("data-player") == p){
+                        CheckedbyCurrentPlayerD.push(i + "," + i);
+                    }
+                }
+
+                if(CheckedbyCurrentPlayerD.length == TableXNumber){
+                    WinExit("左上からの斜め方向");
+                    return true;
+                }
+            }
+
+            // 斜め方向の判定を初期化
+            CheckedbyCurrentPlayerD.splice(0)
+
+            // 右上からの斜め方向の判定
+            {
+                for(x=TableXNumber-1; x > -1; x--){
+                    var y = TableXNumber - x - 1;
+                    var e = document.getElementById(x + "," + y);
+                    if (e.getAttribute("data-clicked") == "true" && e.getAttribute("data-player") == p){
+                        CheckedbyCurrentPlayerD.push(x + "," + y);
+                    }
+                }
+                if(CheckedbyCurrentPlayerD.length == TableXNumber){
+                    WinExit("右上からの斜め方向");
+                    return true;
+                }
+            }
+        } 
+
+        // ログ表示
+        //console.log(p + "のチェック済みのX座標")
+        //console.log(CheckedByCurrentPlayerX)
+        //console.log(p + "のチェック済みのY座標")
+        //console.log(CheckedByCurrentPlayerY)
+
+        // 終了
+        return false;
+    }
+}
diff --git a/sanmoku/script/main.js b/sanmoku/script/main.js
new file mode 100644 (file)
index 0000000..ab0da6f
--- /dev/null
@@ -0,0 +1,112 @@
+// 最初にのみログを表示する
+window.addEventListener("load", function(){
+    console.log(CurrentPlayer + "でゲームをスタートします")
+})
+
+// ボックスがクリックされたときの処理
+// init.jsでボタンがクリックされた場合にClickedBox関数を実行するように指示している
+var ClickedBox = function (e) {
+    var MySelf = e.target // クリックされたボックスを取得する
+
+    if (! GameEnded){ //もしゲームの状態が「終了」でなければ
+        if (MySelf.getAttribute("data-clicked") != "true"){
+            // クリックされたボックスの設定
+            MySelf.innerText = PlayerMarks[CurrentPlayer]; //クリックされたボックスのテキストをクリックしたプレーヤーの記号にする
+
+            //MySelf.dataset.clicked = "true"; //ボックスの状態を「クリック済み」にする
+            //MySelf.dataset.player  = CurrentPlayer; // チェックしたプレーヤーのIDをボックスに書き込む
+
+            MySelf.setAttribute("data-clicked", true) //ボックスの状態を「クリック済み」にする
+            MySelf.setAttribute("data-player", CurrentPlayer) // チェックしたプレーヤーのIDをボックスに書き込む
+
+            // ログ
+            //console.log(CurrentPlayer + "が " + MySelf.dataset.x + "," + MySelf.dataset.y + " をクリックしました")
+            console.log(CurrentPlayer + "が " + MySelf.getAttribute("data-x") + "," + MySelf.getAttribute("data-y") + " をクリックしました")
+
+            // プレイヤーを変更する
+            ChangePlayer();
+
+            // 勝利判定を行う
+            if (Judgement()){
+                return;
+            }
+
+            // 現在の情報を更新する
+            UpdateCurrentConfig();
+
+            // すべてチェックされた場合の処理
+            CheckedBox++;
+            if (CheckedBox == TableXNumber * TableYNumber){  // もしチェックされた数とマス目の数が等しいならば
+                Msg.innerText = "終了" // メッセージに終了と表示
+                GameEnded = true; // ゲームの状態を「終了」にする
+            }
+        }else{
+            console.log("既にクリックされています")
+        }
+    }
+}
+
+// プレーヤーを変更する処理
+var ChangePlayer = function(){
+    if (CurrentPlayer == PlayerNumer - 1){ // 今のプレーヤーが最後だったら
+        CurrentPlayer = 0; //最初のプレーヤーに戻る
+    }else{
+        CurrentPlayer++; //次のプレーヤーにする
+    }
+    console.log("プレイヤー" + CurrentPlayer + "の番です") //ログを表示する
+}
+
+// 現在の設定を表示する関数
+var UpdateCurrentConfig = function() {
+    // ゲーム設定を表示
+    var p1 = document.createElement("p") //ゲーム設定を表示する枠を作成
+    p1.innerText = "横: " + TableXNumber +  "縦: " + TableYNumber // テキストを設定
+
+    // プレーヤー情報を表示
+    var p2 = document.createElement("p") // プレーヤー情報を表示する枠を作成
+    p2.innerText = "人数: " + PlayerNumer + "人 現在: " + PlayerMarks[CurrentPlayer]
+
+    // 作成した枠を文書に挿入
+    CurrentConfig.innerHTML = "" ; // 枠の中の文書を削除
+    CurrentConfig.appendChild(p1);  // ゲーム設定を挿入
+    CurrentConfig.appendChild(p2);  // プレーヤー情報を挿入
+}
+
+// 初回起動時に現在の設定を表示
+window.addEventListener("load", UpdateCurrentConfig)
+
+// リセットボタンが押されたときの処理
+ResetButton.addEventListener("click", function(){
+    location.reload();
+})
+
+// 初回起動時に設定のボックス内に初期設定を入れておく
+window.addEventListener("load", function(){
+    InputTableX.value = TableXNumber;
+    InputTableY.value = TableYNumber;
+    InputPlayerNumber.value = PlayerNumer;
+})
+
+// 適用ボタンが押された時の処理
+ApplyButton.addEventListener("click", function(){
+
+    // それぞれの状態を初期化
+    PlayerNumer   = InputPlayerNumber.value;
+    GameEnded     = false;
+    CheckedBox    = 0;
+    CurrentPlayer = 0;
+    Msg.innerText = "";
+
+    // 入力された値が正常か確認
+    if(InputTableX.value >= 3 && InputTableY.value >= 3){
+        TableXNumber = InputTableX.value;
+        TableYNumber = InputTableY.value;
+    }else{
+        Msg.innerText = "3以上の整数を指定してください"
+        return;
+    }
+    
+    // ゲーム全体の初期化と表示されている設定を更新
+    InitilizeTable();
+    UpdateCurrentConfig();
+})
diff --git a/sanmoku/style/common.css b/sanmoku/style/common.css
new file mode 100644 (file)
index 0000000..922e91b
--- /dev/null
@@ -0,0 +1,30 @@
+/* 全体の見た目 */\r
+body{\r
+    margin: 0; /* 外側の空白を0にする */\r
+    min-width: 320px; /* 最初の横幅を設定 (これを設定しないとスマホで表示が崩れてしまう)*/\r
+}\r
+\r
+html{\r
+    background-color: white; /* 背景色を白にする */\r
+    color: black; /* 文字色を黒にする */\r
+}\r
+\r
+/* ゲーム本体の見た目 */\r
+\r
+#maintable tr{\r
+    width: 50%; /*ゲーム本体の横幅を画面の半分に設定*/\r
+}\r
+\r
+/* ボックス1つ1つの見た目 */\r
+#maintable td{\r
+    background-color: blue; /* 背景の色を青に設定 */\r
+    margin: 50px; /* ボックス同士の空白を画面のドット50個分に設定 */\r
+\r
+    width: 100px; /* ボックスの幅を画面のドット100個に設定 */\r
+    height: 100px; /* ボックスの高さを画面のドット100個に設定 */\r
+    \r
+    font-size: 20px; /* ボックス内の文字の大きさをドット20個に設定 */\r
+    line-height: 20px; /* ボックスの1行の高さをドット20個に設定 */\r
+\r
+    text-align: center; /* 文字を左右中央に配置 */\r
+}
\ No newline at end of file
diff --git a/sanmoku/style/pc.css b/sanmoku/style/pc.css
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/sanmoku/style/sp.css b/sanmoku/style/sp.css
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/sleep/index.php b/sleep/index.php
new file mode 100644 (file)
index 0000000..ad66af0
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="ja">
+
+<head>
+  <meta charset="UFT-8">
+  <title>指定された秒数後に応答する</title>
+</head>
+
+<body>
+  <h1>指定された秒数後に応答する</h1>
+  <p>
+    指定された秒数後に応答します。タイムアウトのテストなどに利用してください。
+  </p>
+  <p>
+    <form action="./sleep.php" method="GET">
+      <input type="number" name="time_to_wait"><br>
+      <input type="submit" value="実行">
+    </form>
+  </p>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/sleep/sleep.php b/sleep/sleep.php
new file mode 100644 (file)
index 0000000..9c7cd51
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+  </head>
+  <body>
+    <?php
+        $wait = $_GET['time_to_wait'];
+        sleep($wait);
+    ?>
+  </body>
+</html>
diff --git a/tatebou/index.html b/tatebou/index.html
new file mode 100644 (file)
index 0000000..244e177
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>迫真縦棒ドメインのウェブUI</title>
+</head>
+<body style="width: 100vw;">
+    <div>
+        <h1>迫真縦棒ドメインのウェブUI</h1>
+        <p>迫真縦棒ドメインの短縮URLの作成をするためのインターフェースです。</p>
+        <form autocomplete="off">
+            <h2>URLを入力</h2>
+            <p><input type="text" name="url" id="url" style="width: 50%;"><input type="button" value="作成" onclick="run()"></p>
+
+            <h2>結果</h2>
+            <p><input type="text" name="output" id="output" readonly style="width: 50%;"></p>
+        </form>
+    </div>
+
+    <div style="display: none;" id="div_test">
+        <h2>テスト</h2>
+        <p>上のリンクを貼りました。ここでテストできます。</p>
+        <p><input type="button" value="テストする" onclick="test()"></p>
+    </div>
+
+    <script>
+        var result = null;
+        function run(){
+            // データを取得
+            let url=document.getElementById("url").value;
+            let output=document.getElementById("output");
+
+            if (! url){
+                output.value="";
+                return 0;
+            }else if(url.indexOf("http") !== 0 ){
+                url="https://" + url;
+                document.getElementById("url").value=url;
+            }
+
+            let xhr = new XMLHttpRequest();
+            xhr.open("POST",`https://1lil.li/p/`, true);
+            send_text=`l=${url}`
+            xhr.onreadystatechange = function() {
+                console.log(xhr.status)
+                if(xhr.readyState === 4 && xhr.status === 201) {
+                    result=xhr.responseText;
+                    output.value=result;
+
+                    // テストを表示
+                    let div_test = document.getElementById("div_test");
+                    div_test.style.display = "inline";
+                    return;
+                }
+
+                if(xhr.readyState === 4 && xhr.status === 400){
+                    alert("正しいURLを入力してください");
+                    return;
+                }
+            }
+            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+            xhr.send(send_text);
+        }
+
+        function test(){
+            window.open(result, "_blank");
+        }
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/update-blog.sh b/update-blog.sh
new file mode 100644 (file)
index 0000000..e2649e7
--- /dev/null
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+set -eu
+
+script_path="$( cd -P "$( dirname "$(readlink -f "${0}")" )" && pwd )"
+cd "${script_path}/blog"
+hugo --minify