2023-10-03 11:14:36 +08:00
|
|
|
/*
|
|
|
|
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
|
|
|
|
]
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = processing;
|