Unity Docs Syntax Hightligher Fork

Adds syntax highlighting to the Unity Documentation. Forked from hyblocker.

2023-10-09 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

    // ==UserScript==
    // @name        Unity Docs Syntax Hightligher Fork
    // @namespace   Violentmonkey Scripts
    // @version     1.1
    // @author      Maoyeedy
    // @license     MIT
    // @description Adds syntax highlighting to the Unity Documentation. Forked from hyblocker.
    //
    // @match       https://docs.unity3d.com/Manual/*
    // @match       https://docs.unity3d.com/ScriptReference/*
    // @match       https://docs.unity3d.com/*/Manual/*
    // @match       https://docs.unity3d.com/*/ScriptReference/*
    //
    // @grant       GM_getResourceText
    // @grant       GM_addStyle
    //
    // @require     https://unpkg.com/[email protected]/prism.js
    // @require     https://unpkg.com/[email protected]/components/prism-c.min.js
    // @require     https://unpkg.com/[email protected]/components/prism-clike.min.js
    // @require     https://unpkg.com/[email protected]/components/prism-csharp.min.js
    // @require     https://unpkg.com/[email protected]/components/prism-hlsl.min.js
    // @resource    PRISM_THEME https://unpkg.com/[email protected]/themes/prism-twilight.min.css

    //
    // ==/UserScript==

    (function() {
        'use strict';
        GM_addStyle(GM_getResourceText("PRISM_THEME"));
        //Recommended Themes
        //https://unpkg.com/[email protected]/themes/prism-tomorrow.min.css
        //https://unpkg.com/[email protected]/themes/prism-twilight.min.css
        //https://unpkg.com/[email protected]/themes/prism.min.css

        // Inject custom CSS
        const customCSS = `
            code {
                font-family: 'Jetbrains Mono', monospace !important;
                font-size: 0.875em !important;
            }
        `;

        const styleElement = document.createElement('style');
        styleElement.type = 'text/css';
        styleElement.appendChild(document.createTextNode(customCSS));
        document.head.appendChild(styleElement);
    }());


    const CSHARP = 0;
    const HLSL = 1;

    var waitForGlobal = function(key, callback) {
      if (window[key]) {
        callback();
      } else {
        setTimeout(function() {
          waitForGlobal(key, callback);
        }, 100);
      }
    };
    function waitForLangLoad(lang, callback) {
      if (Prism.util.getLanguage(lang) != null) {
        callback();
      } else {
        setTimeout(function() {
          waitForLangLoad(lang, callback);
        }, 100);
      }
    }

    function detectCodeLanguage(elem) {
      if (elem.classList.contains('codeExampleCS')) {
        return CSHARP;
      }

      if (elem.innerHTML.match(/CGPROGRAM|ENDCG|CGINCLUDE|#pragma|SubShader \"/g) != null) {
        return HLSL;
      }

      return CSHARP;
    }

    waitForGlobal("Prism", () => {
      waitForLangLoad("csharp", () => {
        waitForLangLoad("hlsl", () => {
          document.querySelectorAll('.content-wrap pre').forEach((el) => {
            el.innerHTML = el.innerHTML.replace(/\<br\>/g, '\n');
            if (detectCodeLanguage(el) == CSHARP) {
                el.classList.add("language-csharp");
            } else {
                el.classList.add("language-hlsl");
            }
            if (el.firstChild.nodeName != 'CODE') {
              el.innerHTML = `<code>${el.innerHTML}</code>`;
            }
          });
        });
      });
    });