stream-markdown-render
Version:
Vue3 Markdown rendering component without repaint
1,074 lines • 1.52 MB
JavaScript
import { createVNode as I, Fragment as Et, Comment as Mc, Text as Ti, defineComponent as We, inject as xc, useSlots as wc, ref as Ae, watch as Ac, nextTick as Ze, onMounted as Pc, onUnmounted as Ic, computed as kc, createTextVNode as Uc, h as ht } from "vue";
import Fc from "markdown-it";
import * as fi from "echarts";
import qi from "mermaid";
import Bc from "panzoom";
function Gc(t) {
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
}
var Ft, Hi;
function Yc() {
if (Hi) return Ft;
Hi = 1;
function t(m) {
return m instanceof Map ? m.clear = m.delete = m.set = function() {
throw new Error("map is read-only");
} : m instanceof Set && (m.add = m.clear = m.delete = function() {
throw new Error("set is read-only");
}), Object.freeze(m), Object.getOwnPropertyNames(m).forEach((T) => {
const v = m[T], F = typeof v;
(F === "object" || F === "function") && !Object.isFrozen(v) && t(v);
}), m;
}
class e {
/**
* @param {CompiledMode} mode
*/
constructor(T) {
T.data === void 0 && (T.data = {}), this.data = T.data, this.isMatchIgnored = !1;
}
ignoreMatch() {
this.isMatchIgnored = !0;
}
}
function n(m) {
return m.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
function a(m, ...T) {
const v = /* @__PURE__ */ Object.create(null);
for (const F in m)
v[F] = m[F];
return T.forEach(function(F) {
for (const re in F)
v[re] = F[re];
}), /** @type {T} */
v;
}
const r = "</span>", i = (m) => !!m.scope, l = (m, { prefix: T }) => {
if (m.startsWith("language:"))
return m.replace("language:", "language-");
if (m.includes(".")) {
const v = m.split(".");
return [
`${T}${v.shift()}`,
...v.map((F, re) => `${F}${"_".repeat(re + 1)}`)
].join(" ");
}
return `${T}${m}`;
};
class o {
/**
* Creates a new HTMLRenderer
*
* @param {Tree} parseTree - the parse tree (must support `walk` API)
* @param {{classPrefix: string}} options
*/
constructor(T, v) {
this.buffer = "", this.classPrefix = v.classPrefix, T.walk(this);
}
/**
* Adds texts to the output stream
*
* @param {string} text */
addText(T) {
this.buffer += n(T);
}
/**
* Adds a node open to the output stream (if needed)
*
* @param {Node} node */
openNode(T) {
if (!i(T)) return;
const v = l(
T.scope,
{ prefix: this.classPrefix }
);
this.span(v);
}
/**
* Adds a node close to the output stream (if needed)
*
* @param {Node} node */
closeNode(T) {
i(T) && (this.buffer += r);
}
/**
* returns the accumulated buffer
*/
value() {
return this.buffer;
}
// helpers
/**
* Builds a span element
*
* @param {string} className */
span(T) {
this.buffer += `<span class="${T}">`;
}
}
const u = (m = {}) => {
const T = { children: [] };
return Object.assign(T, m), T;
};
class s {
constructor() {
this.rootNode = u(), this.stack = [this.rootNode];
}
get top() {
return this.stack[this.stack.length - 1];
}
get root() {
return this.rootNode;
}
/** @param {Node} node */
add(T) {
this.top.children.push(T);
}
/** @param {string} scope */
openNode(T) {
const v = u({ scope: T });
this.add(v), this.stack.push(v);
}
closeNode() {
if (this.stack.length > 1)
return this.stack.pop();
}
closeAllNodes() {
for (; this.closeNode(); ) ;
}
toJSON() {
return JSON.stringify(this.rootNode, null, 4);
}
/**
* @typedef { import("./html_renderer").Renderer } Renderer
* @param {Renderer} builder
*/
walk(T) {
return this.constructor._walk(T, this.rootNode);
}
/**
* @param {Renderer} builder
* @param {Node} node
*/
static _walk(T, v) {
return typeof v == "string" ? T.addText(v) : v.children && (T.openNode(v), v.children.forEach((F) => this._walk(T, F)), T.closeNode(v)), T;
}
/**
* @param {Node} node
*/
static _collapse(T) {
typeof T != "string" && T.children && (T.children.every((v) => typeof v == "string") ? T.children = [T.children.join("")] : T.children.forEach((v) => {
s._collapse(v);
}));
}
}
class c extends s {
/**
* @param {*} options
*/
constructor(T) {
super(), this.options = T;
}
/**
* @param {string} text
*/
addText(T) {
T !== "" && this.add(T);
}
/** @param {string} scope */
startScope(T) {
this.openNode(T);
}
endScope() {
this.closeNode();
}
/**
* @param {Emitter & {root: DataNode}} emitter
* @param {string} name
*/
__addSublanguage(T, v) {
const F = T.root;
v && (F.scope = `language:${v}`), this.add(F);
}
toHTML() {
return new o(this, this.options).value();
}
finalize() {
return this.closeAllNodes(), !0;
}
}
function _(m) {
return m ? typeof m == "string" ? m : m.source : null;
}
function d(m) {
return g("(?=", m, ")");
}
function p(m) {
return g("(?:", m, ")*");
}
function E(m) {
return g("(?:", m, ")?");
}
function g(...m) {
return m.map((v) => _(v)).join("");
}
function S(m) {
const T = m[m.length - 1];
return typeof T == "object" && T.constructor === Object ? (m.splice(m.length - 1, 1), T) : {};
}
function b(...m) {
return "(" + (S(m).capture ? "" : "?:") + m.map((F) => _(F)).join("|") + ")";
}
function f(m) {
return new RegExp(m.toString() + "|").exec("").length - 1;
}
function R(m, T) {
const v = m && m.exec(T);
return v && v.index === 0;
}
const O = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;
function A(m, { joinWith: T }) {
let v = 0;
return m.map((F) => {
v += 1;
const re = v;
let ie = _(F), x = "";
for (; ie.length > 0; ) {
const D = O.exec(ie);
if (!D) {
x += ie;
break;
}
x += ie.substring(0, D.index), ie = ie.substring(D.index + D[0].length), D[0][0] === "\\" && D[1] ? x += "\\" + String(Number(D[1]) + re) : (x += D[0], D[0] === "(" && v++);
}
return x;
}).map((F) => `(${F})`).join(T);
}
const C = /\b\B/, L = "[a-zA-Z]\\w*", h = "[a-zA-Z_]\\w*", k = "\\b\\d+(\\.\\d+)?", Y = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)", w = "\\b(0b[01]+)", V = "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", j = (m = {}) => {
const T = /^#![ ]*\//;
return m.binary && (m.begin = g(
T,
/.*\b/,
m.binary,
/\b.*/
)), a({
scope: "meta",
begin: T,
end: /$/,
relevance: 0,
/** @type {ModeCallback} */
"on:begin": (v, F) => {
v.index !== 0 && F.ignoreMatch();
}
}, m);
}, ee = {
begin: "\\\\[\\s\\S]",
relevance: 0
}, W = {
scope: "string",
begin: "'",
end: "'",
illegal: "\\n",
contains: [ee]
}, $ = {
scope: "string",
begin: '"',
end: '"',
illegal: "\\n",
contains: [ee]
}, J = {
begin: /\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/
}, ae = function(m, T, v = {}) {
const F = a(
{
scope: "comment",
begin: m,
end: T,
contains: []
},
v
);
F.contains.push({
scope: "doctag",
// hack to avoid the space from being included. the space is necessary to
// match here to prevent the plain text rule below from gobbling up doctags
begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,
excludeBegin: !0,
relevance: 0
});
const re = b(
// list of common 1 and 2 letter words in English
"I",
"a",
"is",
"so",
"us",
"to",
"at",
"if",
"in",
"it",
"on",
// note: this is not an exhaustive list of contractions, just popular ones
/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,
// contractions - can't we'd they're let's, etc
/[A-Za-z]+[-][a-z]+/,
// `no-way`, etc.
/[A-Za-z][a-z]{2,}/
// allow capitalized words at beginning of sentences
);
return F.contains.push(
{
// TODO: how to include ", (, ) without breaking grammars that use these for
// comment delimiters?
// begin: /[ ]+([()"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()":]?([.][ ]|[ ]|\))){3}/
// ---
// this tries to find sequences of 3 english words in a row (without any
// "programming" type syntax) this gives us a strong signal that we've
// TRULY found a comment - vs perhaps scanning with the wrong language.
// It's possible to find something that LOOKS like the start of the
// comment - but then if there is no readable text - good chance it is a
// false match and not a comment.
//
// for a visual example please see:
// https://github.com/highlightjs/highlight.js/issues/2827
begin: g(
/[ ]+/,
// necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */
"(",
re,
/[.]?[:]?([.][ ]|[ ])/,
"){3}"
)
// look for 3 words in a row
}
), F;
}, fe = ae("//", "$"), Oe = ae("/\\*", "\\*/"), Re = ae("#", "$"), Ie = {
scope: "number",
begin: k,
relevance: 0
}, Ce = {
scope: "number",
begin: Y,
relevance: 0
}, ge = {
scope: "number",
begin: w,
relevance: 0
}, se = {
scope: "regexp",
begin: /\/(?=[^/\n]*\/)/,
end: /\/[gimuy]*/,
contains: [
ee,
{
begin: /\[/,
end: /\]/,
relevance: 0,
contains: [ee]
}
]
}, ue = {
scope: "title",
begin: L,
relevance: 0
}, X = {
scope: "title",
begin: h,
relevance: 0
}, z = {
// excludes method names from keyword processing
begin: "\\.\\s*" + h,
relevance: 0
};
var ne = /* @__PURE__ */ Object.freeze({
__proto__: null,
APOS_STRING_MODE: W,
BACKSLASH_ESCAPE: ee,
BINARY_NUMBER_MODE: ge,
BINARY_NUMBER_RE: w,
COMMENT: ae,
C_BLOCK_COMMENT_MODE: Oe,
C_LINE_COMMENT_MODE: fe,
C_NUMBER_MODE: Ce,
C_NUMBER_RE: Y,
END_SAME_AS_BEGIN: function(m) {
return Object.assign(
m,
{
/** @type {ModeCallback} */
"on:begin": (T, v) => {
v.data._beginMatch = T[1];
},
/** @type {ModeCallback} */
"on:end": (T, v) => {
v.data._beginMatch !== T[1] && v.ignoreMatch();
}
}
);
},
HASH_COMMENT_MODE: Re,
IDENT_RE: L,
MATCH_NOTHING_RE: C,
METHOD_GUARD: z,
NUMBER_MODE: Ie,
NUMBER_RE: k,
PHRASAL_WORDS_MODE: J,
QUOTE_STRING_MODE: $,
REGEXP_MODE: se,
RE_STARTERS_RE: V,
SHEBANG: j,
TITLE_MODE: ue,
UNDERSCORE_IDENT_RE: h,
UNDERSCORE_TITLE_MODE: X
});
function le(m, T) {
m.input[m.index - 1] === "." && T.ignoreMatch();
}
function Se(m, T) {
m.className !== void 0 && (m.scope = m.className, delete m.className);
}
function ve(m, T) {
T && m.beginKeywords && (m.begin = "\\b(" + m.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)", m.__beforeBegin = le, m.keywords = m.keywords || m.beginKeywords, delete m.beginKeywords, m.relevance === void 0 && (m.relevance = 0));
}
function Je(m, T) {
Array.isArray(m.illegal) && (m.illegal = b(...m.illegal));
}
function gt(m, T) {
if (m.match) {
if (m.begin || m.end) throw new Error("begin & end are not supported with match");
m.begin = m.match, delete m.match;
}
}
function ze(m, T) {
m.relevance === void 0 && (m.relevance = 1);
}
const je = (m, T) => {
if (!m.beforeMatch) return;
if (m.starts) throw new Error("beforeMatch cannot be used with starts");
const v = Object.assign({}, m);
Object.keys(m).forEach((F) => {
delete m[F];
}), m.keywords = v.keywords, m.begin = g(v.beforeMatch, d(v.begin)), m.starts = {
relevance: 0,
contains: [
Object.assign(v, { endsParent: !0 })
]
}, m.relevance = 0, delete v.beforeMatch;
}, et = [
"of",
"and",
"for",
"in",
"not",
"or",
"if",
"then",
"parent",
// common variable name
"list",
// common variable name
"value"
// common variable name
], St = "keyword";
function tt(m, T, v = St) {
const F = /* @__PURE__ */ Object.create(null);
return typeof m == "string" ? re(v, m.split(" ")) : Array.isArray(m) ? re(v, m) : Object.keys(m).forEach(function(ie) {
Object.assign(
F,
tt(m[ie], T, ie)
);
}), F;
function re(ie, x) {
T && (x = x.map((D) => D.toLowerCase())), x.forEach(function(D) {
const U = D.split("|");
F[U[0]] = [ie, Ke(U[0], U[1])];
});
}
}
function Ke(m, T) {
return T ? Number(T) : bt(m) ? 0 : 1;
}
function bt(m) {
return et.includes(m.toLowerCase());
}
const nt = {}, xe = (m) => {
console.error(m);
}, Be = (m, ...T) => {
console.log(`WARN: ${m}`, ...T);
}, be = (m, T) => {
nt[`${m}/${T}`] || (console.log(`Deprecated as of ${m}. ${T}`), nt[`${m}/${T}`] = !0);
}, qe = new Error();
function at(m, T, { key: v }) {
let F = 0;
const re = m[v], ie = {}, x = {};
for (let D = 1; D <= T.length; D++)
x[D + F] = re[D], ie[D + F] = !0, F += f(T[D - 1]);
m[v] = x, m[v]._emit = ie, m[v]._multi = !0;
}
function rt(m) {
if (Array.isArray(m.begin)) {
if (m.skip || m.excludeBegin || m.returnBegin)
throw xe("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), qe;
if (typeof m.beginScope != "object" || m.beginScope === null)
throw xe("beginScope must be object"), qe;
at(m, m.begin, { key: "beginScope" }), m.begin = A(m.begin, { joinWith: "" });
}
}
function $e(m) {
if (Array.isArray(m.end)) {
if (m.skip || m.excludeEnd || m.returnEnd)
throw xe("skip, excludeEnd, returnEnd not compatible with endScope: {}"), qe;
if (typeof m.endScope != "object" || m.endScope === null)
throw xe("endScope must be object"), qe;
at(m, m.end, { key: "endScope" }), m.end = A(m.end, { joinWith: "" });
}
}
function Tt(m) {
m.scope && typeof m.scope == "object" && m.scope !== null && (m.beginScope = m.scope, delete m.scope);
}
function it(m) {
Tt(m), typeof m.beginScope == "string" && (m.beginScope = { _wrap: m.beginScope }), typeof m.endScope == "string" && (m.endScope = { _wrap: m.endScope }), rt(m), $e(m);
}
function ft(m) {
function T(x, D) {
return new RegExp(
_(x),
"m" + (m.case_insensitive ? "i" : "") + (m.unicodeRegex ? "u" : "") + (D ? "g" : "")
);
}
class v {
constructor() {
this.matchIndexes = {}, this.regexes = [], this.matchAt = 1, this.position = 0;
}
// @ts-ignore
addRule(D, U) {
U.position = this.position++, this.matchIndexes[this.matchAt] = U, this.regexes.push([U, D]), this.matchAt += f(D) + 1;
}
compile() {
this.regexes.length === 0 && (this.exec = () => null);
const D = this.regexes.map((U) => U[1]);
this.matcherRe = T(A(D, { joinWith: "|" }), !0), this.lastIndex = 0;
}
/** @param {string} s */
exec(D) {
this.matcherRe.lastIndex = this.lastIndex;
const U = this.matcherRe.exec(D);
if (!U)
return null;
const _e = U.findIndex((Xe, Ot) => Ot > 0 && Xe !== void 0), oe = this.matchIndexes[_e];
return U.splice(0, _e), Object.assign(U, oe);
}
}
class F {
constructor() {
this.rules = [], this.multiRegexes = [], this.count = 0, this.lastIndex = 0, this.regexIndex = 0;
}
// @ts-ignore
getMatcher(D) {
if (this.multiRegexes[D]) return this.multiRegexes[D];
const U = new v();
return this.rules.slice(D).forEach(([_e, oe]) => U.addRule(_e, oe)), U.compile(), this.multiRegexes[D] = U, U;
}
resumingScanAtSamePosition() {
return this.regexIndex !== 0;
}
considerAll() {
this.regexIndex = 0;
}
// @ts-ignore
addRule(D, U) {
this.rules.push([D, U]), U.type === "begin" && this.count++;
}
/** @param {string} s */
exec(D) {
const U = this.getMatcher(this.regexIndex);
U.lastIndex = this.lastIndex;
let _e = U.exec(D);
if (this.resumingScanAtSamePosition() && !(_e && _e.index === this.lastIndex)) {
const oe = this.getMatcher(0);
oe.lastIndex = this.lastIndex + 1, _e = oe.exec(D);
}
return _e && (this.regexIndex += _e.position + 1, this.regexIndex === this.count && this.considerAll()), _e;
}
}
function re(x) {
const D = new F();
return x.contains.forEach((U) => D.addRule(U.begin, { rule: U, type: "begin" })), x.terminatorEnd && D.addRule(x.terminatorEnd, { type: "end" }), x.illegal && D.addRule(x.illegal, { type: "illegal" }), D;
}
function ie(x, D) {
const U = (
/** @type CompiledMode */
x
);
if (x.isCompiled) return U;
[
Se,
// do this early so compiler extensions generally don't have to worry about
// the distinction between match/begin
gt,
it,
je
].forEach((oe) => oe(x, D)), m.compilerExtensions.forEach((oe) => oe(x, D)), x.__beforeBegin = null, [
ve,
// do this later so compiler extensions that come earlier have access to the
// raw array if they wanted to perhaps manipulate it, etc.
Je,
// default to 1 relevance if not specified
ze
].forEach((oe) => oe(x, D)), x.isCompiled = !0;
let _e = null;
return typeof x.keywords == "object" && x.keywords.$pattern && (x.keywords = Object.assign({}, x.keywords), _e = x.keywords.$pattern, delete x.keywords.$pattern), _e = _e || /\w+/, x.keywords && (x.keywords = tt(x.keywords, m.case_insensitive)), U.keywordPatternRe = T(_e, !0), D && (x.begin || (x.begin = /\B|\b/), U.beginRe = T(U.begin), !x.end && !x.endsWithParent && (x.end = /\B|\b/), x.end && (U.endRe = T(U.end)), U.terminatorEnd = _(U.end) || "", x.endsWithParent && D.terminatorEnd && (U.terminatorEnd += (x.end ? "|" : "") + D.terminatorEnd)), x.illegal && (U.illegalRe = T(
/** @type {RegExp | string} */
x.illegal
)), x.contains || (x.contains = []), x.contains = [].concat(...x.contains.map(function(oe) {
return Rt(oe === "self" ? x : oe);
})), x.contains.forEach(function(oe) {
ie(
/** @type Mode */
oe,
U
);
}), x.starts && ie(x.starts, D), U.matcher = re(U), U;
}
if (m.compilerExtensions || (m.compilerExtensions = []), m.contains && m.contains.includes("self"))
throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");
return m.classNameAliases = a(m.classNameAliases || {}), ie(
/** @type Mode */
m
);
}
function ot(m) {
return m ? m.endsWithParent || ot(m.starts) : !1;
}
function Rt(m) {
return m.variants && !m.cachedVariants && (m.cachedVariants = m.variants.map(function(T) {
return a(m, { variants: null }, T);
})), m.cachedVariants ? m.cachedVariants : ot(m) ? a(m, { starts: m.starts ? a(m.starts) : null }) : Object.isFrozen(m) ? a(m) : m;
}
var Ct = "11.11.1";
class Nt extends Error {
constructor(T, v) {
super(T), this.name = "HTMLInjectionError", this.html = v;
}
}
const Qe = n, st = a, K = Symbol("nomatch"), He = 7, Pe = function(m) {
const T = /* @__PURE__ */ Object.create(null), v = /* @__PURE__ */ Object.create(null), F = [];
let re = !0;
const ie = "Could not find the language '{}', did you forget to load/include a language module?", x = { disableAutodetect: !0, name: "Plain text", contains: [] };
let D = {
ignoreUnescapedHTML: !1,
throwUnescapedHTML: !1,
noHighlightRe: /^(no-?highlight)$/i,
languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i,
classPrefix: "hljs-",
cssSelector: "pre code",
languages: null,
// beta configuration options, subject to change, welcome to discuss
// https://github.com/highlightjs/highlight.js/issues/1086
__emitter: c
};
function U(N) {
return D.noHighlightRe.test(N);
}
function _e(N) {
let P = N.className + " ";
P += N.parentNode ? N.parentNode.className : "";
const q = D.languageDetectRe.exec(P);
if (q) {
const Z = Ue(q[1]);
return Z || (Be(ie.replace("{}", q[1])), Be("Falling back to no-highlight mode for this block.", N)), Z ? q[1] : "no-highlight";
}
return P.split(/\s+/).find((Z) => U(Z) || Ue(Z));
}
function oe(N, P, q) {
let Z = "", ce = "";
typeof P == "object" ? (Z = N, q = P.ignoreIllegals, ce = P.language) : (be("10.7.0", "highlight(lang, code, ...args) has been deprecated."), be("10.7.0", `Please use highlight(code, options) instead.
https://github.com/highlightjs/highlight.js/issues/2277`), ce = N, Z = P), q === void 0 && (q = !0);
const ye = {
code: Z,
language: ce
};
ct("before:highlight", ye);
const Fe = ye.result ? ye.result : Xe(ye.language, ye.code, q);
return Fe.code = ye.code, ct("after:highlight", Fe), Fe;
}
function Xe(N, P, q, Z) {
const ce = /* @__PURE__ */ Object.create(null);
function ye(y, M) {
return y.keywords[M];
}
function Fe() {
if (!B.keywords) {
de.addText(Q);
return;
}
let y = 0;
B.keywordPatternRe.lastIndex = 0;
let M = B.keywordPatternRe.exec(Q), G = "";
for (; M; ) {
G += Q.substring(y, M.index);
const H = he.case_insensitive ? M[0].toLowerCase() : M[0], me = ye(B, H);
if (me) {
const [De, Gi] = me;
if (de.addText(G), G = "", ce[H] = (ce[H] || 0) + 1, ce[H] <= He && (Ve += Gi), De.startsWith("_"))
G += M[0];
else {
const Yi = he.classNameAliases[De] || De;
Le(M[0], Yi);
}
} else
G += M[0];
y = B.keywordPatternRe.lastIndex, M = B.keywordPatternRe.exec(Q);
}
G += Q.substring(y), de.addText(G);
}
function ut() {
if (Q === "") return;
let y = null;
if (typeof B.subLanguage == "string") {
if (!T[B.subLanguage]) {
de.addText(Q);
return;
}
y = Xe(B.subLanguage, Q, !0, yt[B.subLanguage]), yt[B.subLanguage] = /** @type {CompiledMode} */
y._top;
} else
y = At(Q, B.subLanguage.length ? B.subLanguage : null);
B.relevance > 0 && (Ve += y.relevance), de.__addSublanguage(y._emitter, y.language);
}
function Ne() {
B.subLanguage != null ? ut() : Fe(), Q = "";
}
function Le(y, M) {
y !== "" && (de.startScope(M), de.addText(y), de.endScope());
}
function wt(y, M) {
let G = 1;
const H = M.length - 1;
for (; G <= H; ) {
if (!y._emit[G]) {
G++;
continue;
}
const me = he.classNameAliases[y[G]] || y[G], De = M[G];
me ? Le(De, me) : (Q = De, Fe(), Q = ""), G++;
}
}
function Pt(y, M) {
return y.scope && typeof y.scope == "string" && de.openNode(he.classNameAliases[y.scope] || y.scope), y.beginScope && (y.beginScope._wrap ? (Le(Q, he.classNameAliases[y.beginScope._wrap] || y.beginScope._wrap), Q = "") : y.beginScope._multi && (wt(y.beginScope, M), Q = "")), B = Object.create(y, { parent: { value: B } }), B;
}
function kt(y, M, G) {
let H = R(y.endRe, G);
if (H) {
if (y["on:end"]) {
const me = new e(y);
y["on:end"](M, me), me.isMatchIgnored && (H = !1);
}
if (H) {
for (; y.endsParent && y.parent; )
y = y.parent;
return y;
}
}
if (y.endsWithParent)
return kt(y.parent, M, G);
}
function ki(y) {
return B.matcher.regexIndex === 0 ? (Q += y[0], 1) : (pt = !0, 0);
}
function Ui(y) {
const M = y[0], G = y.rule, H = new e(G), me = [G.__beforeBegin, G["on:begin"]];
for (const De of me)
if (De && (De(y, H), H.isMatchIgnored))
return ki(M);
return G.skip ? Q += M : (G.excludeBegin && (Q += M), Ne(), !G.returnBegin && !G.excludeBegin && (Q = M)), Pt(G, y), G.returnBegin ? 0 : M.length;
}
function Fi(y) {
const M = y[0], G = P.substring(y.index), H = kt(B, y, G);
if (!H)
return K;
const me = B;
B.endScope && B.endScope._wrap ? (Ne(), Le(M, B.endScope._wrap)) : B.endScope && B.endScope._multi ? (Ne(), wt(B.endScope, y)) : me.skip ? Q += M : (me.returnEnd || me.excludeEnd || (Q += M), Ne(), me.excludeEnd && (Q = M));
do
B.scope && de.closeNode(), !B.skip && !B.subLanguage && (Ve += B.relevance), B = B.parent;
while (B !== H.parent);
return H.starts && Pt(H.starts, y), me.returnEnd ? 0 : M.length;
}
function Bi() {
const y = [];
for (let M = B; M !== he; M = M.parent)
M.scope && y.unshift(M.scope);
y.forEach((M) => de.openNode(M));
}
let _t = {};
function vt(y, M) {
const G = M && M[0];
if (Q += y, G == null)
return Ne(), 0;
if (_t.type === "begin" && M.type === "end" && _t.index === M.index && G === "") {
if (Q += P.slice(M.index, M.index + 1), !re) {
const H = new Error(`0 width match regex (${N})`);
throw H.languageName = N, H.badRule = _t.rule, H;
}
return 1;
}
if (_t = M, M.type === "begin")
return Ui(M);
if (M.type === "illegal" && !q) {
const H = new Error('Illegal lexeme "' + G + '" for mode "' + (B.scope || "<unnamed>") + '"');
throw H.mode = B, H;
} else if (M.type === "end") {
const H = Fi(M);
if (H !== K)
return H;
}
if (M.type === "illegal" && G === "")
return Q += `
`, 1;
if (mt > 1e5 && mt > M.index * 3)
throw new Error("potential infinite loop, way more iterations than matches");
return Q += G, G.length;
}
const he = Ue(N);
if (!he)
throw xe(ie.replace("{}", N)), new Error('Unknown language: "' + N + '"');
const Ut = ft(he);
let dt = "", B = Z || Ut;
const yt = {}, de = new D.__emitter(D);
Bi();
let Q = "", Ve = 0, we = 0, mt = 0, pt = !1;
try {
if (he.__emitTokens)
he.__emitTokens(P, de);
else {
for (B.matcher.considerAll(); ; ) {
mt++, pt ? pt = !1 : B.matcher.considerAll(), B.matcher.lastIndex = we;
const y = B.matcher.exec(P);
if (!y) break;
const M = P.substring(we, y.index), G = vt(M, y);
we = y.index + G;
}
vt(P.substring(we));
}
return de.finalize(), dt = de.toHTML(), {
language: N,
value: dt,
relevance: Ve,
illegal: !1,
_emitter: de,
_top: B
};
} catch (y) {
if (y.message && y.message.includes("Illegal"))
return {
language: N,
value: Qe(P),
illegal: !0,
relevance: 0,
_illegalBy: {
message: y.message,
index: we,
context: P.slice(we - 100, we + 100),
mode: y.mode,
resultSoFar: dt
},
_emitter: de
};
if (re)
return {
language: N,
value: Qe(P),
illegal: !1,
relevance: 0,
errorRaised: y,
_emitter: de,
_top: B
};
throw y;
}
}
function Ot(N) {
const P = {
value: Qe(N),
illegal: !1,
relevance: 0,
_top: x,
_emitter: new D.__emitter(D)
};
return P._emitter.addText(N), P;
}
function At(N, P) {
P = P || D.languages || Object.keys(T);
const q = Ot(N), Z = P.filter(Ue).filter(xt).map(
(Ne) => Xe(Ne, N, !1)
);
Z.unshift(q);
const ce = Z.sort((Ne, Le) => {
if (Ne.relevance !== Le.relevance) return Le.relevance - Ne.relevance;
if (Ne.language && Le.language) {
if (Ue(Ne.language).supersetOf === Le.language)
return 1;
if (Ue(Le.language).supersetOf === Ne.language)
return -1;
}
return 0;
}), [ye, Fe] = ce, ut = ye;
return ut.secondBest = Fe, ut;
}
function Ai(N, P, q) {
const Z = P && v[P] || q;
N.classList.add("hljs"), N.classList.add(`language-${Z}`);
}
function It(N) {
let P = null;
const q = _e(N);
if (U(q)) return;
if (ct(
"before:highlightElement",
{ el: N, language: q }
), N.dataset.highlighted) {
console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.", N);
return;
}
if (N.children.length > 0 && (D.ignoreUnescapedHTML || (console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), console.warn("The element with unescaped HTML:"), console.warn(N)), D.throwUnescapedHTML))
throw new Nt(
"One of your code blocks includes unescaped HTML.",
N.innerHTML
);
P = N;
const Z = P.textContent, ce = q ? oe(Z, { language: q, ignoreIllegals: !0 }) : At(Z);
N.innerHTML = ce.value, N.dataset.highlighted = "yes", Ai(N, q, ce.language), N.result = {
language: ce.language,
// TODO: remove with version 11.0
re: ce.relevance,
relevance: ce.relevance
}, ce.secondBest && (N.secondBest = {
language: ce.secondBest.language,
relevance: ce.secondBest.relevance
}), ct("after:highlightElement", { el: N, result: ce, text: Z });
}
function Ii(N) {
D = st(D, N);
}
const vi = () => {
lt(), be("10.6.0", "initHighlighting() deprecated. Use highlightAll() now.");
};
function yi() {
lt(), be("10.6.0", "initHighlightingOnLoad() deprecated. Use highlightAll() now.");
}
let Lt = !1;
function lt() {
function N() {
lt();
}
if (document.readyState === "loading") {
Lt || window.addEventListener("DOMContentLoaded", N, !1), Lt = !0;
return;
}
document.querySelectorAll(D.cssSelector).forEach(It);
}
function hi(N, P) {
let q = null;
try {
q = P(m);
} catch (Z) {
if (xe("Language definition for '{}' could not be registered.".replace("{}", N)), re)
xe(Z);
else
throw Z;
q = x;
}
q.name || (q.name = N), T[N] = q, q.rawDefinition = P.bind(null, m), q.aliases && Mt(q.aliases, { languageName: N });
}
function Di(N) {
delete T[N];
for (const P of Object.keys(v))
v[P] === N && delete v[P];
}
function Li() {
return Object.keys(T);
}
function Ue(N) {
return N = (N || "").toLowerCase(), T[N] || T[v[N]];
}
function Mt(N, { languageName: P }) {
typeof N == "string" && (N = [N]), N.forEach((q) => {
v[q.toLowerCase()] = P;
});
}
function xt(N) {
const P = Ue(N);
return P && !P.disableAutodetect;
}
function Mi(N) {
N["before:highlightBlock"] && !N["before:highlightElement"] && (N["before:highlightElement"] = (P) => {
N["before:highlightBlock"](
Object.assign({ block: P.el }, P)
);
}), N["after:highlightBlock"] && !N["after:highlightElement"] && (N["after:highlightElement"] = (P) => {
N["after:highlightBlock"](
Object.assign({ block: P.el }, P)
);
});
}
function xi(N) {
Mi(N), F.push(N);
}
function wi(N) {
const P = F.indexOf(N);
P !== -1 && F.splice(P, 1);
}
function ct(N, P) {
const q = N;
F.forEach(function(Z) {
Z[q] && Z[q](P);
});
}
function Pi(N) {
return be("10.7.0", "highlightBlock will be removed entirely in v12.0"), be("10.7.0", "Please use highlightElement now."), It(N);
}
Object.assign(m, {
highlight: oe,
highlightAuto: At,
highlightAll: lt,
highlightElement: It,
// TODO: Remove with v12 API
highlightBlock: Pi,
configure: Ii,
initHighlighting: vi,
initHighlightingOnLoad: yi,
registerLanguage: hi,
unregisterLanguage: Di,
listLanguages: Li,
getLanguage: Ue,
registerAliases: Mt,
autoDetection: xt,
inherit: st,
addPlugin: xi,
removePlugin: wi
}), m.debugMode = function() {
re = !1;
}, m.safeMode = function() {
re = !0;
}, m.versionString = Ct, m.regex = {
concat: g,
lookahead: d,
either: b,
optional: E,
anyNumberOfTimes: p
};
for (const N in ne)
typeof ne[N] == "object" && t(ne[N]);
return Object.assign(m, ne), m;
}, ke = Pe({});
return ke.newInstance = () => Pe({}), Ft = ke, ke.HighlightJS = ke, ke.default = ke, Ft;
}
var Bt, Vi;
function qc() {
if (Vi) return Bt;
Vi = 1;
function t(e) {
const n = "[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+", i = "далее " + "возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ", u = "загрузитьизфайла " + "вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ", p = "разделительстраниц разделительстрок символтабуляции " + "ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон " + "acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища " + "wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ", Oe = "webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля " + "автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы " + "виддвижениябухгалтерии виддвижениянакопления видпериодарегистрара