/*
Language: Processing
Description: Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.
Author: Erik Paluka <erik.paluka@gmail.com>
Website: https://processing.org
Category: graphics
*/
function processing(hljs) {
    const regex = hljs.regex;
    const BUILT_INS = [
        "displayHeight",
        "displayWidth",
        "mouseY",
        "mouseX",
        "mousePressed",
        "pmouseX",
        "pmouseY",
        "key",
        "keyCode",
        "pixels",
        "focused",
        "frameCount",
        "frameRate",
        "height",
        "width",
        "size",
        "createGraphics",
        "beginDraw",
        "createShape",
        "loadShape",
        "PShape",
        "arc",
        "ellipse",
        "line",
        "point",
        "quad",
        "rect",
        "triangle",
        "bezier",
        "bezierDetail",
        "bezierPoint",
        "bezierTangent",
        "curve",
        "curveDetail",
        "curvePoint",
        "curveTangent",
        "curveTightness",
        "shape",
        "shapeMode",
        "beginContour",
        "beginShape",
        "bezierVertex",
        "curveVertex",
        "endContour",
        "endShape",
        "quadraticVertex",
        "vertex",
        "ellipseMode",
        "noSmooth",
        "rectMode",
        "smooth",
        "strokeCap",
        "strokeJoin",
        "strokeWeight",
        "mouseClicked",
        "mouseDragged",
        "mouseMoved",
        "mousePressed",
        "mouseReleased",
        "mouseWheel",
        "keyPressed",
        "keyPressedkeyReleased",
        "keyTyped",
        "print",
        "println",
        "save",
        "saveFrame",
        "day",
        "hour",
        "millis",
        "minute",
        "month",
        "second",
        "year",
        "background",
        "clear",
        "colorMode",
        "fill",
        "noFill",
        "noStroke",
        "stroke",
        "alpha",
        "blue",
        "brightness",
        "color",
        "green",
        "hue",
        "lerpColor",
        "red",
        "saturation",
        "modelX",
        "modelY",
        "modelZ",
        "screenX",
        "screenY",
        "screenZ",
        "ambient",
        "emissive",
        "shininess",
        "specular",
        "add",
        "createImage",
        "beginCamera",
        "camera",
        "endCamera",
        "frustum",
        "ortho",
        "perspective",
        "printCamera",
        "printProjection",
        "cursor",
        "frameRate",
        "noCursor",
        "exit",
        "loop",
        "noLoop",
        "popStyle",
        "pushStyle",
        "redraw",
        "binary",
        "boolean",
        "byte",
        "char",
        "float",
        "hex",
        "int",
        "str",
        "unbinary",
        "unhex",
        "join",
        "match",
        "matchAll",
        "nf",
        "nfc",
        "nfp",
        "nfs",
        "split",
        "splitTokens",
        "trim",
        "append",
        "arrayCopy",
        "concat",
        "expand",
        "reverse",
        "shorten",
        "sort",
        "splice",
        "subset",
        "box",
        "sphere",
        "sphereDetail",
        "createInput",
        "createReader",
        "loadBytes",
        "loadJSONArray",
        "loadJSONObject",
        "loadStrings",
        "loadTable",
        "loadXML",
        "open",
        "parseXML",
        "saveTable",
        "selectFolder",
        "selectInput",
        "beginRaw",
        "beginRecord",
        "createOutput",
        "createWriter",
        "endRaw",
        "endRecord",
        "PrintWritersaveBytes",
        "saveJSONArray",
        "saveJSONObject",
        "saveStream",
        "saveStrings",
        "saveXML",
        "selectOutput",
        "popMatrix",
        "printMatrix",
        "pushMatrix",
        "resetMatrix",
        "rotate",
        "rotateX",
        "rotateY",
        "rotateZ",
        "scale",
        "shearX",
        "shearY",
        "translate",
        "ambientLight",
        "directionalLight",
        "lightFalloff",
        "lights",
        "lightSpecular",
        "noLights",
        "normal",
        "pointLight",
        "spotLight",
        "image",
        "imageMode",
        "loadImage",
        "noTint",
        "requestImage",
        "tint",
        "texture",
        "textureMode",
        "textureWrap",
        "blend",
        "copy",
        "filter",
        "get",
        "loadPixels",
        "set",
        "updatePixels",
        "blendMode",
        "loadShader",
        "PShaderresetShader",
        "shader",
        "createFont",
        "loadFont",
        "text",
        "textFont",
        "textAlign",
        "textLeading",
        "textMode",
        "textSize",
        "textWidth",
        "textAscent",
        "textDescent",
        "abs",
        "ceil",
        "constrain",
        "dist",
        "exp",
        "floor",
        "lerp",
        "log",
        "mag",
        "map",
        "max",
        "min",
        "norm",
        "pow",
        "round",
        "sq",
        "sqrt",
        "acos",
        "asin",
        "atan",
        "atan2",
        "cos",
        "degrees",
        "radians",
        "sin",
        "tan",
        "noise",
        "noiseDetail",
        "noiseSeed",
        "random",
        "randomGaussian",
        "randomSeed"
    ];
    const IDENT = hljs.IDENT_RE;
    const FUNC_NAME = { variants: [
            {
                match: regex.concat(regex.either(...BUILT_INS), regex.lookahead(/\s*\(/)),
                className: "built_in"
            },
            {
                relevance: 0,
                match: regex.concat(/\b(?!for|if|while)/, IDENT, regex.lookahead(/\s*\(/)),
                className: "title.function"
            }
        ] };
    const NEW_CLASS = {
        match: [
            /new\s+/,
            IDENT
        ],
        className: {
            1: "keyword",
            2: "class.title"
        }
    };
    const PROPERTY = {
        relevance: 0,
        match: [
            /\./,
            IDENT
        ],
        className: { 2: "property" }
    };
    const CLASS = {
        variants: [
            { match: [
                    /class/,
                    /\s+/,
                    IDENT,
                    /\s+/,
                    /extends/,
                    /\s+/,
                    IDENT
                ] },
            { match: [
                    /class/,
                    /\s+/,
                    IDENT
                ] }
        ],
        className: {
            1: "keyword",
            3: "title.class",
            5: "keyword",
            7: "title.class.inherited"
        }
    };
    const TYPES = [
        "boolean",
        "byte",
        "char",
        "color",
        "double",
        "float",
        "int",
        "long",
        "short",
    ];
    const CLASSES = [
        "BufferedReader",
        "PVector",
        "PFont",
        "PImage",
        "PGraphics",
        "HashMap",
        "String",
        "Array",
        "FloatDict",
        "ArrayList",
        "FloatList",
        "IntDict",
        "IntList",
        "JSONArray",
        "JSONObject",
        "Object",
        "StringDict",
        "StringList",
        "Table",
        "TableRow",
        "XML"
    ];
    const JAVA_KEYWORDS = [
        "abstract",
        "assert",
        "break",
        "case",
        "catch",
        "const",
        "continue",
        "default",
        "else",
        "enum",
        "final",
        "finally",
        "for",
        "if",
        "import",
        "instanceof",
        "long",
        "native",
        "new",
        "package",
        "private",
        "private",
        "protected",
        "protected",
        "public",
        "public",
        "return",
        "static",
        "strictfp",
        "switch",
        "synchronized",
        "throw",
        "throws",
        "transient",
        "try",
        "void",
        "volatile",
        "while"
    ];
    return {
        name: 'Processing',
        aliases: ['pde'],
        keywords: {
            keyword: [...JAVA_KEYWORDS],
            literal: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI null true false',
            title: 'setup draw',
            variable: "super this",
            built_in: [
                ...BUILT_INS,
                ...CLASSES
            ],
            type: TYPES
        },
        contains: [
            CLASS,
            NEW_CLASS,
            FUNC_NAME,
            PROPERTY,
            hljs.C_LINE_COMMENT_MODE,
            hljs.C_BLOCK_COMMENT_MODE,
            hljs.APOS_STRING_MODE,
            hljs.QUOTE_STRING_MODE,
            hljs.C_NUMBER_MODE
        ]
    };
}
export { processing as default };
//# sourceMappingURL=processing.js.map