Skip to content

Instantly share code, notes, and snippets.

@gleba
Last active April 24, 2019 10:31
Show Gist options
  • Save gleba/13482258bd3684feec7d65546fa41a8d to your computer and use it in GitHub Desktop.
Save gleba/13482258bd3684feec7d65546fa41a8d to your computer and use it in GitHub Desktop.
monaco.languages.register({ id: 'mySpecialLanguage' });
monaco.languages.setMonarchTokensProvider('mySpecialLanguage', {
tokenizer: {
root: [
[/\?.?[a-z A-Z а-я А-Я 0-9$@?%*#№!_.,:]+/, "question"],
[/\extract_.?[a-z_]+/, "extract"],
[/\$.?[a-z_]+/, "var"],
[/[>-]/, "operator"],
[/^(.*?)\:/, "condition"],
[/\[[a-zA-Z 0-9:]+\]/, "custom-date"],
]
}
});
// Define a new theme that contains only rules that match this language
monaco.editor.defineTheme('myCoolTheme', {
base: 'vs',
inherit: false,
rules: [
{ token: 'var', foreground: '22AA22', fontStyle: 'bold' },
{ token: 'extract', foreground: '22227C', fontStyle: 'bold' },
{ token: 'question', foreground: 'FFA500' },
{ token: 'operator', foreground: '000FF0' , fontStyle: 'bold'},
{ token: 'condition', foreground: '003000' , fontStyle: 'bold'},
]
});
// Register a completion item provider for the new language
monaco.languages.registerCompletionItemProvider('mySpecialLanguage', {
provideCompletionItems: () => {
var suggestions = [{
label: 'simpleText',
kind: monaco.languages.CompletionItemKind.Text,
insertText: 'simpleText'
}, {
label: 'extract_',
kind: monaco.languages.CompletionItemKind.Keyword,
insertText: 'extract_${1:condition}',
insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
}, {
label: '?',
kind: monaco.languages.CompletionItemKind.Snippet,
insertText: "?",
insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'If-Else Statement'
}];
return { suggestions: suggestions };
}
});
monaco.editor.create(document.getElementById("container"), {
theme: 'myCoolTheme',
value: getCode(),
language: 'mySpecialLanguage'
});
function getCode() {
return [
'- Конечно, я люблю дружить с людьми! Меня зовут Электра, я совсем еще молодой бот, и я очень люблю общаться с моими посетителями.',
'? Давайте познакомимся поближе! Как вас зовут? > extract_name $name',
'успех:',
' - Красивое имя, $name!',
'? Я еще учусь и не умею понимать пол человека по имени. Подскажите, какого вы пола? > extract_sex $sex',
'успех:',
' - Спасибо, постараюсь запомнить, что если человека зовут $name, значит у него $sex пол.',
'? Расскажите, а сколько вам лет? > extract_age $age',
'успех:',
' - $age это классный возраст!',
'? Я вот работаю ботом, но все еще учусь понимать людей! А вы учитесь или работаете? > extract_status $status',
'успех:',
' - Это прекрасно, у нас много общего! ok',
'> > check_saying $say_all',
'! $say_all', ' extract_name','x'
].join('\n');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment