For faster navigation, this Iframe is preloading the Wikiwand page for Участник:X-romix/highlight1c.js.

Участник:X-romix/highlight1c.js

Материал из Википедии — свободной энциклопедии

//Скрипт для подсветки кода 1С:Предприятие
//Автор: X-romix

if (mw.config.get('wgAction') == 'view' || mw.config.get('wgAction') == 'submit')
$(function(){
	XRomix_Highlight1c("");
});	


///////////////////////////////////////////////////////////////////////
function XRomix_Highlight1c(prm_id){


var reg_words_1C_77=/^(Если|If|Тогда|Then|ИначеЕсли|ElsIf|Иначе|Else|КонецЕсли|EndIf|Цикл|Do|Для|For|По|To|Пока|While|КонецЦикла|EndDo|Процедура|Procedure|КонецПроцедуры|EndProcedure|Функция|Function|КонецФункции|EndFunction|Перем|Var|Экспорт|Export|Перейти|Goto|И|And|Или|Or|Не|Not|Знач|Val|Прервать|Break|Продолжить|Continue|Возврат|Return|Контекст|Context|Далее|Forward|Попытка|Try|Исключение|Except|КонецПопытки|EndTry|ВызватьИсключение|Raise|ОписаниеОшибки|GetErrorDescription|ТекущаяИБКод|CurrentIBCode|ТекущаяИБНаименование|CurrentIBDescr|ТекущаяИБСтатус|CurrentIBStatus|ТекущаяИБЦентральная|IsCurrentIBCenter|ИБСозданияОбъекта|BirthIBOfObject|ЦентральнаяИБКод|CentralIBCode|ТекущаяИБТолькоПолучатель|IsCurrentIBRecepientOnly|ФС|FS|ЗагрузитьВнешнююКомпоненту|LoadAddIn|ПодключитьВнешнююКомпоненту|AttachAddIn|СоздатьОбъект|CreateObject|СтатусВозврата|ReturnStatus|РазделительСтраниц|PageBreak|РазделительСтрок|LineBreak|СимволТабуляции|TabSymbol|Перечисление|Enum|Константа|Const|ПланыСчетов|ChartsOfAccounts|ВидыСубконто|SubcontoKinds|ВидРасчета|CalculationKind|ГруппаРасчетов|CalculationGroup|Регистр|Register|Окр|Round|Цел|Int|Мин|Min|Макс|Max|Лог10|Log10|Лог|Ln|СтрДлина|StrLen|ПустаяСтрока|IsBlankString|СокрЛ|TrimL|СокрП|TrimR|СокрЛП|TrimAll|Лев|Left|Прав|Right|Сред|Mid|Найти|Find|СтрЗаменить|StrReplace|СтрЧислоВхождений|StrCountOccur|СтрКоличествоСтрок|StrLineCount|СтрПолучитьСтроку|StrGetLine|Врег|Upper|Нрег|Lower|OemToAnsi|AnsiToOem|Симв|Chr|КодСимв|Asc|РабочаяДата|WorkingDate|ТекущаяДата|CurDate|ДобавитьМесяц|AddMonth|НачМесяца|BegOfMonth|КонМесяца|EndOfMonth|НачКвартала|BegOfQuart|КонКвартала|EndOfQuart|НачГода|BegOfYear|КонГода|EndOfYear|НачНедели|BegOfWeek|КонНедели|EndOfWeek|ДатаГод|GetYear|ДатаМесяц|GetMonth|ДатаЧисло|GetDay|НомерНеделиГода|GetWeekOfYear|НомерДняГода|GetDayOfYear|НомерДняНедели|GetDayOfWeek|ПериодСтр|PeriodStr|НачалоСтандартногоИнтервала|BegOfStandardRange|КонецСтандартногоИнтервала|EndOfStandardRange|ТекущееВремя|CurrentTime|СформироватьПозициюДокумента|MakeDocPosition|РазобратьПозициюДокумента|SplitDocPosition|Дата|Date|Строка|String|Число|Number|Пропись|Spelling|Формат|Format|Шаблон|Template|ФиксШаблон|FixTemplate|ВвестиЗначение|InputValue|ВвестиЧисло|InputNumeric|ВвестиСтроку|InputString|ВвестиДату|InputDate|ВвестиПериод|InputPeriod|ВвестиПеречисление|InputEnum|Вопрос|DoQueryBox|Предупреждение|DoMessageBox|Сообщить|Message|ОчиститьОкноСообщений|ClearMessageWindow|Состояние|Status|Сигнал|Beep|Разм|Dim|ЗаголовокСистемы|SystemCaption|ИмяКомпьютера|ComputerName|ИмяПользователя|UserName|ПолноеИмяПользователя|UserFullName|НазваниеНабораПрав|RightName|ПравоДоступа|AccessRight|НазваниеИнтерфейса|UserInterfaceName|КаталогПользователя|UserDir|КаталогИБ|IBDir|КаталогПрограммы|BinDir|КаталогВременныхФайлов|TempFilesDir|КаталогБазыДанных|DBDir|МонопольныйРежим|ExclusiveMode|ОсновнойЯзык|GeneralLanguage|НачатьТранзакцию|BeginTransaction|ЗафиксироватьТранзакцию|CommitTransaсtion|ОтменитьТранзакцию|RollBackTransaction|ЗначениеВСтрокуВнутр|ValueToStringInternal|ЗначениеИзСтрокиВнутр|ValueFromStringInternal|ЗначениеВСтроку|ValueToString|ЗначениеИзСтроки|ValueFromString|ЗначениеВФайл|ValueToFile|ЗначениеИзФайла|ValueFromFile|СохранитьЗначение|SaveValue|ВосстановитьЗначение|RestoreValue|ПолучитьТА|GetAP|ПолучитьДатуТА|GetDateOfAP|ПолучитьВремяТА|GetTimeOfAP|ПолучитьДокументТА|GetDocOfAP|ПолучитьПозициюТА|GetAPPosition|УстановитьТАна|SetAPToBeg|УстановитьТАпо|SetAPToEnd|РассчитатьРегистрыНа|CalcRegsOnBeg|РассчитатьРегистрыПо|CalcRegsOnEnd|ВыбранныйПланСчетов|DefaultChartOfAccounts|ОсновнойПланСчетов|MainChartOfAccounts|СчетПоКоду|AccountByCode|НачалоПериодаБИ|BeginOfPeriodBT|КонецПериодаБИ|EndOfPeriodBT|КонецРассчитанногоПериодаБИ|EndOfCalculatedPeriodBT|МаксимальноеКоличествоСубконто|MaxSubcontoCount|НазначитьСчет|SetAccount|ВвестиПланСчетов|InputChartOfAccounts|ВвестиВидСубконто|InputSubcontoKind|ОсновнойЖурналРасчетов|BasicCalcJournal|ТипЗначения|ValueType|ТипЗначенияСтр|ValueTypeStr|ПустоеЗначение|EmptyValue|ПолучитьПустоеЗначение|GetEmptyValue|НазначитьВид|SetKind|ПрефиксАвтоНумерации|AutoNumPrefix|ПолучитьЗначенияОтбора|GetSelectionValues|ЗаписьЖурналаРегистрации|LogMessageWrite|КомандаСистемы|System|ЗапуститьПриложение|RunApp|ЗавершитьРаботуСистемы|ExitSystem|НайтиПомеченныеНаУдаление|FindMarkedForDelete|НайтиСсылки|FindReferences|УдалитьОбъекты|DeleteObjects|ОбработкаОжидания|IdleProcessing|ОткрытьФорму|OpenForm|ОткрытьФормуМодально|OpenFormModal|_IdToStr|_StrToID|_GetPerformanceCounter|Календари|Calendars|Метаданные|Metadata|Последовательность|Sequence|ПравилоПерерасчета|RecalculationRule)$/i


var reg_words_1C_v8=/^(Если|If|Тогда|Then|ИначеЕсли|ElsIf|Иначе|Else|КонецЕсли|EndIf|Цикл|Do|Для|For|По|To|Пока|While|КонецЦикла|EndDo|Процедура|Procedure|КонецПроцедуры|EndProcedure|Функция|Function|КонецФункции|EndFunction|Перем|Var|Экспорт|Export|Перейти|Goto|И|And|Или|Or|Не|Not|Знач|Val|Прервать|Break|Продолжить|Continue|Возврат|Return|Попытка|Try|Исключение|Except|КонецПопытки|EndTry|ВызватьИсключение|Raise|Из|In|Каждого|Each|Истина|True|Ложь|False|Null|Неопределено|Undefined|Новый|New)$/i


///////////////////////////////////////////////////////////////////////
//Окрашивает слово 1С
function colorWord(s, version){
	var kw=0;
    if(version==7){
		kw=reg_words_1C_77.test(s);
	}else if(version==8){	
		kw=reg_words_1C_v8.test(s);
	}
	
	if(kw){
		//alert('colorWords1: '+s);
		return '<font color=red>'+s+'</font>';
	}else{   
		//alert('colorWords2: '+s);
		return '<font color=blue>'+s+'</font>';
	}
}

///////////////////////////////////////////////////////////////////////
//Окрашивает код 1С, который не является словами
function colorNoWords(s){
	//alert('colorNoWords: '+s);
	s=''+s;
   	s=s.replace( /([\.\;\/\+\-\*\/\%\=\(\)\?\[\]\,]+)/g, "<font color=red>$1</font>");
	
	//alert('colorNoWords_: '+s);
	return s;
}

///////////////////////////////////////////////////////////////////////
//Окрашивает код 1С, который не включает комментарии, текстовые строки, даты, символы вида &gt; 
function colorCode1C(s, version){
	//alert('colorCode1C: '+s);
	if(s.search(/[А-Яа-яA-Za-z_][А-Яа-яA-Za-z_0-9]*/)==-1){
		return colorNoWords(s);
	}
	
	var reg=/[А-Яа-яA-Za-z_][А-Яа-яA-Za-z_0-9]*/g
	var res='';
	s=' '+s+' ';
	var arr_w=s.match(reg);//Все слова 1С
	var arr_n=s.split(reg); //Все последовательности, отличные от слов
		
	for(var i=0; i<arr_w.length; i++){
		var n=arr_n[i];
		var w=arr_w[i];
		if(i==0) n=n.substr(1, n.length-1);//Убираем левый пробел
		res+=colorNoWords(n)+colorWord(w, version);
	}
	n=arr_n[arr_w.length];
	//alert('lastn='+n);
	n=n.substr(0, n.length-1);//Убираем правый пробел
	//alert('lastn_='+n);
	res+=colorNoWords(n);
	
	//alert('colorCode1C_: '+res);
	return res;
}

///////////////////////////////////////////////////////////////////////
//Окрашивает строку кода 1С
function colorString1C(s, version){
	var res='';
	var el='';
	var c='';
	var ok=0;
	
	if(s==''){
	//Вырожденный случай - пустая строка
		return '';
	}
	
	//window.status=s;
	//if(s.search(/Процедура/)!=-1){
	//   alert(s);
	//}
	
	s=s.replace(/\t/g, "    ");
	
	for(var i=0; i<s.length; i++){
		c=s.charAt(i);
		if(c>" "){
			ok=1;
			break;
		}else{
			el=el+c;	
		}
	}
	res+=el;
	if(ok==0){
	//Вырожденный случай - в строке только пробелы
		return res;
	}
	
	s=s.replace(/\&quot\;/gi, '"');
	s=s.replace(/\&apos\;/gi, "'");
	s=s.replace(/\>\;/g, "&gt;");
	s=s.replace(/\<\;/g, "&lt;");
	
	if(c=="|"){
		//Строковый литерал, который начинается символом | ("труба") в начале строки
		p=s.indexOf('"', i+1);
		if(p==-1){
			//Строковый литерал, который начинается символом "труба" и не заканчивается в этой строке
			res+=s.substr(i);
			return res;
		} else {
			//Нашли закрывающую кавычку - теперь найденный строковый литерал надо поместить в массив
			res+=s.substr(i, p-i+1);
			i=p+1;
		}
	}else if(c=="#"){
		//Директива препроцессора
		res+=s.substr(i);
		return res;
	}
	
	while(i<s.length){
		
	//Теперь i указывает на позицию, которая заведомо не является строковым литералом или директивой
		var pstr=s.indexOf('"', i);
		var pcom=s.indexOf('//', i);
		var pdat=s.indexOf("'", i);
		var pspec=s.indexOf("&", i); //последовательности наподобие &lt; &gt; &amp; и т.д.
		
		//Выявляем наименьшее неотрицательное значение, остальным присваиваем -1
		
		if(pcom!=-1 && pdat!=-1){
			if(pcom<pdat){pdat=-1} else {pcom=-1};
		}
		if(pcom!=-1 && pstr!=-1){
			if(pcom<pstr){pstr=-1} else {pcom=-1};
		}
		if(pcom!=-1 && pspec!=-1){
			if(pcom<pspec){pspec=-1} else {pcom=-1};
		}
		
		if(pdat!=-1 && pstr!=-1){
			if(pdat<pstr){pstr=-1} else {pdat=-1};
		}
		if(pdat!=-1 && pspec!=-1){
			if(pdat<pspec){pspec=-1} else {pdat=-1};
		}

		if(pstr!=-1 && pspec!=-1){
			if(pstr<pspec){pspec=-1} else {pstr=-1};
		}
		
		if(pcom!=-1){
			//Обнаружен комментарий
			//строка, предш. комментарию
			res+=colorCode1C(s.substr(i, pcom-i), version);
			//сам комментарий
			res+='<font color=green>'+s.substr(pcom)+'</font>';
			return res;
		} else if(pstr!=-1){
			//Найден строковый литерал
			//строка, предш. литералу
			res+=colorCode1C(s.substr(i, pstr-i), version);
			var p=s.indexOf('"', pstr+1);
			if(p==-1){
				//Строковый литерал, который не заканчивается в этой строке
				res+=s.substr(pstr);
				return res;
			} else {
				//Нашли закрывающую кавычку 
				el=s.substr(pstr, p-pstr+1);
				//alert(el);
				res+=el;
				i=p+1;
			}
		} else if(pdat!=-1){
			//Найден литерал даты, например, '01.01.2008'
			res+=colorCode1C(s.substr(i, pdat-i), version);//строка, предш. литералу
			var p=s.indexOf("'", pdat+1);
			if(p==-1){
				//Ошибочный литерал даты, который не завершается на этой строке
				res+=s.substr(pdat);
				return res;
			} else {
				//Нашли закрывающую кавычку 
				res+=s.substr(pdat, p-pdat+1);
				i=p+1;
			}
		} else if(pspec!=-1){
			res+=colorCode1C(s.substr(i, pspec-i), version);//строка, предш. литералу

			var p=s.indexOf(";", pspec+1);
			
			//Отследим ошибочные случаи
			var p1=s.indexOf(" ", pspec+1);
			if(p1!=-1){
				if(p1<p) p=p1;
			}
			var p1=s.indexOf("\t", pspec+1);
			if(p1!=-1){
				if(p1<p) p=p1;
			}
			
			if(p==-1){
				//Ошибочный литерал 
				el=s.substr(i);
				arr.push(el);
				return arr;
			} else {
				//Нашли закрывающий ; или (при ошибке) пробел
				el=s.substr(pspec, p-pspec+1);
				if(el=='&gt;' || el=='&lt;'){
					res+='<font color=red>'+el+'</font>';
				}else{
					res+=el;
				}
				i=p+1;
			}
		} else {
			//Не найден ни строковый литерал, ни комментарий, ни дата, ни спецсимвол
			res+=colorCode1C(s.substr(i), version);
			return res;
		}
  
    }
	return res;
}

///////////////////////////////////////////////////////////////////////
function colorAllCode1C(s, version){


	var arr1=s.split("\n");
	var res='';
	for (var i=0; i<arr1.length; i++){
		var s1=arr1[i];
		//alert(s1);
		res+=colorString1C(s1, version)+"\n";
	}
	return res;
}

///////////////////////////////////////////////////////////////////////
function colorObj(obj){
	if(!obj) return;
	var attr=obj.getAttribute("LANG");
	if(attr=="1Cv77"){ 
	
		var s=obj.innerHTML;
		obj.innerHTML=""+colorAllCode1C(s,7)+"";
		
	}else if(attr=="1Cv8"){ 
		var s=obj.innerHTML;
		obj.innerHTML=""+colorAllCode1C(s,8)+"";
	}

}


///////////////////////////////////////////////////////////////////////
//Основной код функции окраски кода 1С

	if(prm_id==""){
		var arr = document.getElementsByTagName('PRE');
		for(var i=0; i<arr.length; i++){
			var obj=arr[i];
			colorObj(obj);
		}
	} else {
		var obj=document.getElementById(prm_id);
		colorObj(obj);
	}	
		
}
{{bottomLinkPreText}} {{bottomLinkText}}
Участник:X-romix/highlight1c.js
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?