kjelsrud.dev/node_modules/vscode-css-languageservice/lib/umd/languageFacts/entry.js

153 lines
5.7 KiB
JavaScript
Raw Normal View History

2023-07-19 21:31:30 +02:00
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "../cssLanguageTypes"], factory);
}
})(function (require, exports) {
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBrowserLabel = exports.textToMarkedString = exports.getEntryDescription = exports.browserNames = void 0;
const cssLanguageTypes_1 = require("../cssLanguageTypes");
exports.browserNames = {
E: 'Edge',
FF: 'Firefox',
S: 'Safari',
C: 'Chrome',
IE: 'IE',
O: 'Opera'
};
function getEntryStatus(status) {
switch (status) {
case 'experimental':
return '⚠️ Property is experimental. Be cautious when using it.\n\n';
case 'nonstandard':
return '🚨️ Property is nonstandard. Avoid using it.\n\n';
case 'obsolete':
return '🚨️️️ Property is obsolete. Avoid using it.\n\n';
default:
return '';
}
}
function getEntryDescription(entry, doesSupportMarkdown, settings) {
let result;
if (doesSupportMarkdown) {
result = {
kind: 'markdown',
value: getEntryMarkdownDescription(entry, settings)
};
}
else {
result = {
kind: 'plaintext',
value: getEntryStringDescription(entry, settings)
};
}
if (result.value === '') {
return undefined;
}
return result;
}
exports.getEntryDescription = getEntryDescription;
function textToMarkedString(text) {
text = text.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
return text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
exports.textToMarkedString = textToMarkedString;
function getEntryStringDescription(entry, settings) {
if (!entry.description || entry.description === '') {
return '';
}
if (typeof entry.description !== 'string') {
return entry.description.value;
}
let result = '';
if (settings?.documentation !== false) {
if (entry.status) {
result += getEntryStatus(entry.status);
}
result += entry.description;
const browserLabel = getBrowserLabel(entry.browsers);
if (browserLabel) {
result += '\n(' + browserLabel + ')';
}
if ('syntax' in entry) {
result += `\n\nSyntax: ${entry.syntax}`;
}
}
if (entry.references && entry.references.length > 0 && settings?.references !== false) {
if (result.length > 0) {
result += '\n\n';
}
result += entry.references.map(r => {
return `${r.name}: ${r.url}`;
}).join(' | ');
}
return result;
}
function getEntryMarkdownDescription(entry, settings) {
if (!entry.description || entry.description === '') {
return '';
}
let result = '';
if (settings?.documentation !== false) {
if (entry.status) {
result += getEntryStatus(entry.status);
}
if (typeof entry.description === 'string') {
result += textToMarkedString(entry.description);
}
else {
result += entry.description.kind === cssLanguageTypes_1.MarkupKind.Markdown ? entry.description.value : textToMarkedString(entry.description.value);
}
const browserLabel = getBrowserLabel(entry.browsers);
if (browserLabel) {
result += '\n\n(' + textToMarkedString(browserLabel) + ')';
}
if ('syntax' in entry && entry.syntax) {
result += `\n\nSyntax: ${textToMarkedString(entry.syntax)}`;
}
}
if (entry.references && entry.references.length > 0 && settings?.references !== false) {
if (result.length > 0) {
result += '\n\n';
}
result += entry.references.map(r => {
return `[${r.name}](${r.url})`;
}).join(' | ');
}
return result;
}
/**
* Input is like `["E12","FF49","C47","IE","O"]`
* Output is like `Edge 12, Firefox 49, Chrome 47, IE, Opera`
*/
function getBrowserLabel(browsers = []) {
if (browsers.length === 0) {
return null;
}
return browsers
.map(b => {
let result = '';
const matches = b.match(/([A-Z]+)(\d+)?/);
const name = matches[1];
const version = matches[2];
if (name in exports.browserNames) {
result += exports.browserNames[name];
}
if (version) {
result += ' ' + version;
}
return result;
})
.join(', ');
}
exports.getBrowserLabel = getBrowserLabel;
});