\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{dwmpcode}[2021/12/30 v0.01 Code setting in DwMP]
\RequirePackage{listings}
\RequirePackage{xcolor}
\RequirePackage{luamplib}
\definecolor{textblue}{rgb}{.2,.2,.7}
\definecolor{textred}{rgb}{0.54,0,0}
\definecolor{textgreen}{rgb}{0,0.43,0}
\definecolor{squash}{rgb}{0.793, 0.359, 0.05}
\definecolor{carrot}{rgb}{0.934, 0.445, 0.082}
\definecolor{purple}{rgb}{0.398, 0.008, 0.234}
\def\red#1{\textcolor{textred}{#1}}
\def\blue#1{\textcolor{textblue}{#1}}
\def\green#1{\textcolor{textgreen}{#1}}
\newcommand\mpstyle{\lstset{
language=Metapost,
basicstyle=\ttfamily,
keywordstyle=\color{textblue},
keywordstyle=[5]\color{squash},
keywordstyle=[6]\color{carrot},
keywordstyle=[7]\color{purple},
commentstyle=\color{textred},
stringstyle=\color{textgreen},
frame=none,
columns=fullflexible,
keepspaces=true,
xleftmargin=\parindent,
showstringspaces=false,
% keywords[1] = Syntax primitive + plain sugar
keywords=[1]{beginfig, begingroup, bye, controls, curl, verbatimtex,%
 cycle, def, delimiters, downto, else, elseif, end, enddef, endfig,%
 endfor, endgroup, etex, exitif, exitunless, expr, fi, for, forever,%
 forsuffixes, if, input, numtok, outer, primary, primarydef, range,%
 relax, scantokens, secondary, secondarydef, step, suffix, tension,%
 tertiary, tertiarydef, text, thru, until, upto, vardef, within},%
% keywords[2] = Operators - nullary, unary, binary, thing x of y
keywords=[2]{abs, and, angle, arclength, arctime, ASCII, bbox,%
 blackpart, bluepart, bounded, byte, ceiling, center, char,%
 clipped, colormodel, colorpart, cosd, counterclockwise, cutafter,%
 cutbefore, cyanpart, dashpart, decimal, dir, direction,%
 directionpoint, directiontime, div, dotprod, false, filled, floor,%
 fontpart, fontsize, glyph, gobbled, greenpart, greypart, hex,%
 infont, intersectionpoint, intersectiontimes, inverse, known,%
 length, llcorner, lrcorner, magentapart, makepath, makepen,%
 mexp, mlog, mod, normaldeviate, not, nullpen, nullpicture, oct,%
 odd, of, or, pathpart, pencircle, penoffset, penpart, point,%
 postcontrol, precontrol, readfrom, redpart, reflectedabout,%
 reverse, rotated, rotatedabout, rotatedaround, round, scaled,%
 shifted, sind, slanted, softjoin, sqrt, str, stroked, subpath,%
 substring, textpart, textual, transformed, true,%
 turningnumber, ulcorner, uniformdeviate, unitvector, unknown,%
 urcorner, whatever, xpart, xscaled, xxpart, xypart, yellowpart,%
 ypart, yscaled, yxpart, yypart, zscaled,
 top, bot, lft, rt, ulft, urt, llft, lrt},%
% keywords[3] = Commands
keywords=[3]{addto, also, batchmode, clearit, clearpen, clearxy,%
 clear_pen_memory, clip, closefrom, contour, cutdraw, dotlabel,%
 doublepath, draw, drawarrow, drawdblarrow, drawdot, drawoptions,%
 errhelp, errmessage, errorstopmode, filenametemplate, fill,%
 filldraw, fontmapfile, fontmapline, interim, label, let,%
 loggingall, makelabel, message, newinternal, nonstopmode,%
 penstroke, pickup, randomseed, readstring, save, savepen,%
 scrollmode, setbounds, shipit, shipout, show, showdependencies,%
 showtoken, showvariable, special, to, tracingall, tracingnone,%
 undraw, undrawdot, unfill, unfilldraw, write},%
% keywords[4] = Specials, fancy macros, etc
keywords=[4]{boxit, boxjoin, bpath, buildcycle, circleit, dashed,%
 dashpattern, decr, dotlabels, drawboxed, drawboxes, drawunboxed,%
 erase, fixpos, fixsize, flex, gobble, hide, image, incr, interact,%
 interpath, labels, magstep, max, min, off, on, penlabels, penpos,%
 solve, stop, superellipse, takepower, tensepath, thelabel,%
 withcmykcolor, withcolor, withgreyscale, withoutcolor, withpen,%
 withpostscript, withprescript, withrgbcolor, withalpha, z},%
% keywords[5] = Predefined variables
keywords=[5]{ahangle, ahlength, arrowhead, background, bboxmargin,%
 charcode, circmargin, currentpen, currentpicture, cuttings, day,%
 defaultcolormodel, defaultdx, defaultdy, defaultfont, defaultpen,%
 defaultscale, dotlabeldiam, eps, extra_beginfig, extra_endfig,%
 hour, hppp, jobname, join_radius, labeloffset, laboff, labxf,%
 labyf, linecap, linejoin, minute, miterlimit, month, mpprocset,%
 numberprecision, numbersystem, outputfilename, outputformat,%
 outputformatoptions, outputtemplate, pausing, pen_bot, pen_lft,%
 pen_rt, pen_top, prologues, restoreclipcolor, showstopping, time,%
 tolerance, tracingcapsules, tracingchoices, tracingcommands,%
 tracingequations, tracinglostchars, tracingmacros, tracingonline,%
 tracingoutput, tracingrestores, tracingspecs, tracingstats,%
 tracingtitles, troffmode, truecorners, vppp, warningcheck, year},%
% keywords[6] = Constants
keywords=[6]{base_name, base_version, beveled, black,%
 blankpicture, blue, bp, butt, cc, cm, dd, ditto, down, EOF,%
 epsilon, evenly, fullcircle, green, halfcircle, identity, in, left,%
 mitered, mm, mpversion, origin, pc, penrazor, penspeck,%
 pensquare, pt, quartercircle, red, right, rounded, squared,%
 unitsquare, up, white, withdots, infinity},%
% keywords[7] = Types
keywords=[7]{boolean, cmykcolor, color, numeric, pair, path, pen,%
 picture, rgbcolor, string, transform},%
sensitive=true,%
alsoother={0123456789$@},%
morestring=[s]{verbatimtex}{etex},%
morestring=[s]{btex}{etex}%
}}
\lstnewenvironment{smallcode}[1][]{\mpstyle\lstset{basicstyle=\small\ttfamily,#1}}{}
\lstnewenvironment{code}[1][]{\mpstyle\lstset{#1}}{}
\newcommand\mpexternal[2][]{{\mpstyle\lstinputlisting[#1]{#2}}}
\newcommand\smallmpexternal[2][]{{\mpstyle\lstinputlisting[basicstyle=\small\ttfamily,#1]{#2}}}
\newcommand\mpl[1]{{\normalfont\mpstyle\lstinline!#1!}}
%
\newcommand\texstyle{\lstset{
language=[LaTeX]Tex,
basicstyle=\ttfamily,
keywordstyle=\color{textblue},
commentstyle=\color{textred},
stringstyle=\color{textgreen},
frame=none,
columns=fullflexible,
keepspaces=true,
xleftmargin=\parindent,
showstringspaces=false,
morekeywords={everymplib, everyendmplib, setmainfont,
mplibtextextlabel, mplibnumbersystem, mplibsetformat, mplibshowlog},
}}
\lstnewenvironment{texcode}[1][]{\texstyle\lstset{basicstyle=\small\ttfamily,#1}}{}
\newcommand\txl[1]{{\texstyle\lstinline!#1!}}
\newcommand\texternal[2][]{{\texstyle\lstinputlisting[#1]{#2}}}
\newcommand\smalltexternal[2][]{{\texstyle\lstinputlisting[basicstyle=\small\ttfamily,#1]{#2}}}
%
% Labels..
%
\newcommand\sep[1]{$\vcenter{\begin{mplibcode}
picture T; T = thelabel(TEX("\ttfamily " & #1), origin); interim bboxmargin := 3; path p; p = bbox T;
path S; S = superellipse(point 3/2 of p, point 5/2 of p, point 7/2 of p, point 1/2 of p, 0.78);
string x; x = substring (0, 1) of #1;
fill S withcolor if x = "m": 7/8[red, white] elseif x = "c": 7/8[blue, white] else: white fi;
draw S; draw T;\end{mplibcode}}$}
%
\endinput