mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-03-28 05:48:16 +00:00
most of the css highlights
This commit is contained in:
@@ -17,7 +17,7 @@ import { EditorState, Compartment } from '@codemirror/state';
|
|||||||
import { foldGutter, foldKeymap, syntaxHighlighting } from '@codemirror/language';
|
import { foldGutter, foldKeymap, syntaxHighlighting } from '@codemirror/language';
|
||||||
import { defaultKeymap, history, historyField, undo, redo } from '@codemirror/commands';
|
import { defaultKeymap, history, historyField, undo, redo } from '@codemirror/commands';
|
||||||
import { languages } from '@codemirror/language-data';
|
import { languages } from '@codemirror/language-data';
|
||||||
import { css } from '@codemirror/lang-css';
|
import { css, cssLanguage } from '@codemirror/lang-css';
|
||||||
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
||||||
import { autocompleteEmoji } from './autocompleteEmoji.js';
|
import { autocompleteEmoji } from './autocompleteEmoji.js';
|
||||||
import { searchKeymap, search } from '@codemirror/search';
|
import { searchKeymap, search } from '@codemirror/search';
|
||||||
@@ -31,11 +31,17 @@ const highlightCompartment = new Compartment();
|
|||||||
|
|
||||||
import { customKeymap } from './customKeyMap.js';
|
import { customKeymap } from './customKeyMap.js';
|
||||||
import { homebreweryFold, hbFolding } from './customFolding.js';
|
import { homebreweryFold, hbFolding } from './customFolding.js';
|
||||||
import { customHighlightStyle, tokenizeCustomMarkdown } from './customHighlight.js';
|
import { customHighlightStyle, tokenizeCustomMarkdown, tokenizeCustomCSS } from './customHighlight.js';
|
||||||
import { legacyCustomHighlightStyle, legacyTokenizeCustomMarkdown } from './legacyCustomHighlight.js'; //only makes highlight for
|
import { legacyCustomHighlightStyle, legacyTokenizeCustomMarkdown } from './legacyCustomHighlight.js'; //only makes highlight for
|
||||||
|
|
||||||
const createHighlightPlugin = (renderer, tab)=>{
|
const createHighlightPlugin = (renderer, tab)=>{
|
||||||
const tokenize = renderer === 'V3' ? tokenizeCustomMarkdown : legacyTokenizeCustomMarkdown;
|
let tokenize;
|
||||||
|
|
||||||
|
if (tab === "brewStyles") {
|
||||||
|
tokenize = tokenizeCustomCSS;
|
||||||
|
} else {
|
||||||
|
tokenize = renderer === 'V3' ? tokenizeCustomMarkdown : legacyTokenizeCustomMarkdown;
|
||||||
|
}
|
||||||
/* eslint-disable no-restricted-syntax */
|
/* eslint-disable no-restricted-syntax */
|
||||||
class countWidget extends WidgetType {
|
class countWidget extends WidgetType {
|
||||||
constructor(count) {
|
constructor(count) {
|
||||||
@@ -153,7 +159,7 @@ const CodeEditor = forwardRef(
|
|||||||
highlightExtension,
|
highlightExtension,
|
||||||
];
|
];
|
||||||
|
|
||||||
const languageExtension = language === 'css' ? css() : markdown({ base: markdownLanguage, codeLanguages: languages });
|
const languageExtension = language === 'css' ? [css(), cssLanguage] : markdown({ base: markdownLanguage, codeLanguages: languages });
|
||||||
|
|
||||||
const themeExtension = Array.isArray(themes[editorTheme]) ? themes[editorTheme] : [];
|
const themeExtension = Array.isArray(themes[editorTheme]) ? themes[editorTheme] : [];
|
||||||
|
|
||||||
@@ -178,7 +184,7 @@ const CodeEditor = forwardRef(
|
|||||||
highlightActiveLineGutter(),
|
highlightActiveLineGutter(),
|
||||||
highlightCompartment.of(combinedHighlight),
|
highlightCompartment.of(combinedHighlight),
|
||||||
themeCompartment.of(themeExtension),
|
themeCompartment.of(themeExtension),
|
||||||
autocompleteEmoji,
|
...(tab !== 'brewStyles' ? [autocompleteEmoji] : []),
|
||||||
search(),
|
search(),
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,13 +16,17 @@ const customTags = {
|
|||||||
definitionTerm : 'definitionTerm', // .cm-definitionTerm
|
definitionTerm : 'definitionTerm', // .cm-definitionTerm
|
||||||
definitionDesc : 'definitionDesc', // .cm-definitionDesc
|
definitionDesc : 'definitionDesc', // .cm-definitionDesc
|
||||||
definitionColon : 'definitionColon', // .cm-definitionColon
|
definitionColon : 'definitionColon', // .cm-definitionColon
|
||||||
|
|
||||||
|
//CSS
|
||||||
|
|
||||||
|
variable: 'variable',
|
||||||
|
colorMark: 'colorMark',
|
||||||
};
|
};
|
||||||
|
|
||||||
export function tokenizeCustomMarkdown(text) {
|
export function tokenizeCustomMarkdown(text) {
|
||||||
const tokens = [];
|
const tokens = [];
|
||||||
const lines = text.split('\n');
|
const lines = text.split('\n');
|
||||||
|
|
||||||
console.log(tags);
|
|
||||||
lines.forEach((lineText, lineNumber)=>{
|
lines.forEach((lineText, lineNumber)=>{
|
||||||
// --- Page / snippet lines ---
|
// --- Page / snippet lines ---
|
||||||
if(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m.test(lineText)) tokens.push({ line: lineNumber, type: customTags.pageLine });
|
if(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m.test(lineText)) tokens.push({ line: lineNumber, type: customTags.pageLine });
|
||||||
@@ -228,6 +232,29 @@ export function tokenizeCustomMarkdown(text) {
|
|||||||
return tokens;
|
return tokens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function tokenizeCustomCSS(text) {
|
||||||
|
const tokens = [];
|
||||||
|
const lines = text.split('\n');
|
||||||
|
|
||||||
|
lines.forEach((lineText, lineNumber)=>{
|
||||||
|
|
||||||
|
if(/--[a-zA-Z0-9-_]+/gm.test(lineText)) {
|
||||||
|
const varRegex =/--[a-zA-Z0-9-_]+/gm;
|
||||||
|
let match;
|
||||||
|
while ((match = varRegex.exec(lineText)) !== null) {
|
||||||
|
tokens.push({
|
||||||
|
line : lineNumber,
|
||||||
|
from : match.index +1,
|
||||||
|
to : match.index + match.length[1] +1,
|
||||||
|
type : customTags.varProperty,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
export const customHighlightStyle = HighlightStyle.define([
|
export const customHighlightStyle = HighlightStyle.define([
|
||||||
{ tag: tags.heading, class: 'cm-header' },
|
{ tag: tags.heading, class: 'cm-header' },
|
||||||
{ tag: tags.heading1, class: 'cm-header cm-header-1' },
|
{ tag: tags.heading1, class: 'cm-header cm-header-1' },
|
||||||
@@ -236,13 +263,27 @@ export const customHighlightStyle = HighlightStyle.define([
|
|||||||
{ tag: tags.heading4, class: 'cm-header cm-header-4' },
|
{ tag: tags.heading4, class: 'cm-header cm-header-4' },
|
||||||
{ tag: tags.heading5, class: 'cm-header cm-header-5' },
|
{ tag: tags.heading5, class: 'cm-header cm-header-5' },
|
||||||
{ tag: tags.heading6, class: 'cm-header cm-header-6' },
|
{ tag: tags.heading6, class: 'cm-header cm-header-6' },
|
||||||
|
|
||||||
{ tag: tags.link, class: 'cm-link' },
|
{ tag: tags.link, class: 'cm-link' },
|
||||||
{ tag: tags.string, class: 'cm-string' },
|
{ tag: tags.string, class: 'cm-string' },
|
||||||
{ tag: tags.url, class: 'cm-string cm-url' },
|
{ tag: tags.url, class: 'cm-string cm-url' },
|
||||||
{ tag: tags.list, class: 'cm-list' },
|
{ tag: tags.list, class: 'cm-list' },
|
||||||
{ tag: tags.strong, class: 'cm-strong' },
|
{ tag: tags.strong, class: 'cm-strong' },
|
||||||
{ tag: tags.emphasis, class: 'cm-em' },
|
{ tag: tags.emphasis, class: 'cm-em' },
|
||||||
|
|
||||||
|
{ tag: tags.tagName, class: 'cm-tag' },
|
||||||
|
{ tag: tags.className, class: 'cm-class' },
|
||||||
|
{ tag: tags.propertyName, class: 'cm-property' },
|
||||||
|
{ tag: tags.attributeValue, class: 'cm-value' },
|
||||||
|
{ tag: tags.keyword, class: 'cm-keyword' },
|
||||||
|
{ tag: tags.atom, class: 'cm-atom' },
|
||||||
|
{ tag: tags.integer, class: 'cm-integer' },
|
||||||
|
{ tag: tags.unit, class: 'cm-unit' },
|
||||||
|
{ tag: tags.color, class: 'cm-color' },
|
||||||
|
{ tag: tags.paren, class: 'cm-paren' },
|
||||||
|
{ tag: tags.variableName, class: 'cm-variable' },
|
||||||
|
{ tag: tags.invalid, class: 'cm-error' },
|
||||||
|
{ tag: tags.comment, class: 'cm-comment' },
|
||||||
|
|
||||||
{ tag: customTags.pageLine, color: '#f0a' },
|
{ tag: customTags.pageLine, color: '#f0a' },
|
||||||
{ tag: customTags.snippetLine, class: 'cm-snippetLine', color: '#0af' },
|
{ tag: customTags.snippetLine, class: 'cm-snippetLine', color: '#0af' },
|
||||||
|
|||||||
@@ -46,8 +46,6 @@ export const defaultCM5Theme = EditorView.theme({
|
|||||||
},
|
},
|
||||||
".cm-foldmarker": {
|
".cm-foldmarker": {
|
||||||
color: "blue",
|
color: "blue",
|
||||||
textShadow:
|
|
||||||
"#b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px",
|
|
||||||
fontFamily: "arial",
|
fontFamily: "arial",
|
||||||
lineHeight: "0.3",
|
lineHeight: "0.3",
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
@@ -59,16 +57,16 @@ export const defaultCM5Theme = EditorView.theme({
|
|||||||
".cm-em": { fontStyle: "italic" },
|
".cm-em": { fontStyle: "italic" },
|
||||||
".cm-quote": { color: "#090" },
|
".cm-quote": { color: "#090" },
|
||||||
".cm-keyword": { color: "#708" },
|
".cm-keyword": { color: "#708" },
|
||||||
".cm-atom": { color: "#219" },
|
".cm-atom, cm-value, cm-color": { color: "#219" },
|
||||||
".cm-number": { color: "#164" },
|
".cm-number": { color: "#164" },
|
||||||
".cm-def": { color: "#00f" },
|
".cm-def": { color: "#00f" },
|
||||||
".cm-list": { color: "#05a" },
|
".cm-list": { color: "#05a" },
|
||||||
".cm-variable-3, .cm-type": { color: "#085" },
|
".cm-variable, .cm-type": { color: "#085" },
|
||||||
".cm-comment": { color: "#a50" },
|
".cm-comment": { color: "#a50" },
|
||||||
".cm-link": { color: "#00c", textDecoration: "underline" },
|
".cm-link": { color: "#00c", textDecoration: "underline" },
|
||||||
".cm-string": { color: "#a11", textDecoration: "none" },
|
".cm-string": { color: "#a11", textDecoration: "none" },
|
||||||
".cm-string-2": { color: "#f50", textDecoration: "none" },
|
".cm-string-2": { color: "#f50", textDecoration: "none" },
|
||||||
".cm-meta, .cm-qualifier": { color: "#555" },
|
".cm-meta, .cm-qualifier, .cm-class": { color: "#555" },
|
||||||
".cm-builtin": { color: "#30a" },
|
".cm-builtin": { color: "#30a" },
|
||||||
".cm-bracket": { color: "#997" },
|
".cm-bracket": { color: "#997" },
|
||||||
".cm-tag": { color: "#170" },
|
".cm-tag": { color: "#170" },
|
||||||
|
|||||||
Reference in New Issue
Block a user