Перейти к содержимому

Сервис обмена электронных валют


Подсветка кода

#1 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8
0

Отправлено 09 Август 2009 - 12:43

Объявляю: С сегодняшнего утра 5:40 по Московскому времени был установлен мод подсветки кода. В модуль вошли такие известные языки как(в скобках указаны идентификаторы):
PHP ("php"), Perl ("perl"), Python ("python"), Ruby ("ruby"), SQL ("sql"), XML ("xml"), HTML ("html"), CSS ("css"), JavaScript ("javascript"), VBscript ("vbscript"), Django ("django"), C++ ("cpp"), C# ("cs")

Для использования подсветки синтаксиса достаточно окружить код bb-тегом [сode=[идентификатор_языка]]КОД[/сode]
Пока только в полном форматировании темы("Ответ", "Создать тему") присутствует интерфейс для удобной вставки bb-тегов в виде выпадающего списка.
Внимание! Показанный пример выше содержит ошибку, дабы показать вам написание bb-кода. Была произведена замена одной буквы для того, чтобы интерпретатор не воспринял написанное как bb-теги

И так покажу вам работу данного модуля.

PHP
<?php

/**
* Функция showControl принимает один параметр $control,
* этот параметр должен являться классом и являться
* экземпляром класса HTMLControl либо классом,
* унаследованным от HTMLControl.
*/
function showControl(&$control) {
is_a($control, 'HTMLControl') or $control == null or exit('Type missmatch.');
...
}

function checkParameter(&$var, $class) {
if (!is_a($var, $class) && $var != null)
SFExit('Type missmatch.');
}

function SFExit(&$message) {
print $message . '<br>';
$backtrace = debug_backtrace();
for($i = 0; $i < count($backtrace); $i++) {
print $i . ': ' . $backtrace[$i]['file'] . '(' . $backtrace[$i]['line'] . ')<br>';
}
exit();
}
?>


Perl
%hash = (
			'cat' => 'kitten',  # здесь => - это так называемая "длинная запятая", 
			'dog' => 'puppy',   # в этом примере по функции полностью аналогичная обыкновенной ",".
			'cow' => 'calf'
		);
print $hash{'cat'}; #Напечатает kitten
print join("-", keys %hash); # Вывод всех ключей. Напечатает cat-dog-cow 
print join("-", values %hash); # Вывод всех значений. Напечатает kitten-puppy-calf
print join("-", %hash); # Напечатает cat-kitten-cow-calf-dog-puppy, так как в списковом контексте хэш автоматически
# разворачивается в список (ключ, значение). Так как ключи в хэше не сортируются,
# пары каждый раз будут выводиться в произвольном порядке.

Python
try:
	#здесь код, который может вызвать исключение
	raise ExceptionType("message")
except (Тип исключения1, Тип исключения2, …), Переменная:
	#Код в блоке выполняется, если тип исключения совпадает с одним из типов
	#(Тип исключения1, Тип исключения2, …) или является наследником одного
	#из этих типов.
	#Полученное исключение доступно в необязательной Переменной.
except (Тип исключения3, Тип исключения4, …), Переменная:
	#количество блоков except не ограниченно
	raise #Сгенерировать исключение "поверх" полученного
except:
	#Будет выполнено при любом исключении, не обработанном типизированными блоками except
else:
	#Код блока выполняется, если не было поймано исключений.
finally:
	#будет исполненно в любом случае, возможно после соответствующего
	#блока except или else

def getClass():
	return dict
class D(getClass()):
	pass
d = D()

Ruby
class Person				# объявление класса начинается с ключевого слова class, за которым
							 # следует имя
   include Comparable		# [[b:Ruby/Справочник/Comparable|Comparable]] подмешивается к классу 
							 # и добавляет методы <, <=, ==, >=, > и between?
							 # с использованием нижеопределённого
							 # в классе <=>
							 #
   @@count_obj = 0		   # переменная класса для подсчёта числа созданных объектов
							 # 
							 # конструктор для создания объектов с помощью new
   def initialize(name, age) # name, age - параметры метода
							 # название переменных объекта начинается с @
	 @name, @age = name, age # создаём объекты и увеличиваем счётчик на 1
	 @@count_obj += 1
   end
 
   def <=>(person)		   # переопределение оператора <=>
							 # (это даёт возможность использовать метод sort
	 @age <=> person.age	 # из метода возвращается последнее вычисленное выражение,
   end
 
   def to_s				  # для форматированного вывода информации puts
	 "#{@name} (#{@age})"	# конструкция #{x} в 2-х кавычках замещается в Ruby значением x
   end
 
   def inspect			   # похож на to_s, но используется для диагностического вывода
	 "<#{@@count_obj}:#{to_s}>"
   end
							 # пример метапрограммирования: добавляет методы для доступа к
							 # переменным объекта
   attr_reader :name, :age
 end
							 # создаём массив объектов
 group = [ Person.new("John", 20),
		  Person.new("Markus", 63),
		  Person.new("Ash", 16) ]
					  # => [<3:John (20)>, <3:Markus (63)>, <3:Ash (16)>]
					  # здесь при работе с irb автоматически вызывается метод inspect
					  # вызываем методы массива сортировка и разворачивание его в обратном порядке
 puts group.sort.reverse # Печатает:
						 # Markus (63)
						 # John (20)
						 # Ash (16)
									# обращаемся к функции, которая была добавлена
									# автоматически(используя <=>) при включении Comparable
 group[0].between?(group[2], group[1]) # => true

SQL
SELECT pole1, pole2 FROM table WHERE pole1=pole2 AND pole2=pole1 GROUP BY(pole1) ORDER BY pole2 DESC;
DELETE FROM table WHERE id < 3;


XML
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
<title>Простой хлеб</title>
<ingredient amount="3" unit="стакан">Мука</ingredient>
<ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
<ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
<ingredient amount="1" unit="чайная ложка">Соль</ingredient>
<Instructions>
<step>Смешать все ингредиенты и тщательно замесить.</step>
<step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
</Instructions>
</recipe>


HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тестовое название</title>
</head>
<body>
<!-- start -->
<table width="100%" height="500" cellpadding="3" border="0">
<tr>
<td>значение в ячейке</td>
</tr>
</table>
<!-- end-->
</body>
</html>


CSS
p
{
  font-family: "Garamond", serif;
}

h2
{
  font-size: 110 %;
  color: red;
  background: white;
}

.note
{
  color: red;
  background: yellow;
  font-weight: bold;
}

p#paragraph1
{
  margin: 0;
}

a:hover
{
  text-decoration: none;
}

#news p
{
  color: blue;
}

JavaScript
function MyClass()
 {
   this.myValue1 = 1;
   this.myValue2 = 2;
 }
 
 MyClass.prototype.myMethod = function()
 {
   return this.myValue1 * this.myValue2;
 }
 
 var mc = new MyClass();
 mc.myValue1 = mc.myValue2 * 2;
 var i = mc.myMethod();

VBscript
Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)

Django
from email.utils import getaddresses, formataddr

from django import forms
from django.utils.translation import ugettext_lazy as _

class EmailListField(forms.CharField):
	"""
	A Django form field which validates a list of email addresses.
	
	>>> EmailListField().clean('user1@example.com')
	[u'user1@example.com']
	
	>>> EmailListField().clean('User 1 <user1@example.com>, User 2 <user2@example.com>')
	[u'User 1 <user1@example.com>', u'User 2 <user2@example.com>']
	
	>>> EmailListField().clean('invalid email address')
	Traceback (most recent call last):
	  File "<console>", line 1, in <module>
	  File "/home/sciyoshi/chideit/apps/chide/common/mail/forms.py", line 21, in clean
		raise forms.ValidationError(self.error_messages['invalid'])
	ValidationError: [u'Please enter a valid list of e-mail addresses.']
	
	>>> EmailListField().clean('"User 3>" <  "Abc\@def"@example.com  >, User 2 <$A12345@example.com >  , 3rd guy <!def!xyz%abc@example.com >')
	[u'"User 3>" <"Abc@def"@example.com>', u'User 2 <$A12345@example.com>', u'3rd guy <!def!xyz%abc@example.com>']
	"""
	default_error_messages = {
		'invalid': _('Please enter a valid list of e-mail addresses.')
	}

Java
public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello, World!");
	}
}

import java.util.*;
public class Sample {
	public static void main(String[] args) {
		// Создание объекта по шаблону.
		List<String> strings = new LinkedList<String>();
		strings.add("Hello");
		strings.add("world");
		strings.add("!");
		for (String s : strings) {
			System.out.print(s);
			System.out.print(" ");
		}
	}
}

C++
class Array {
public:
	void Alloc(int new_len);
	void Free();
	inline double Elem(int i);
	inline void ChangeElem(int i, double x);
protected:
	int len;
	double* val;
};
 
void Array::Alloc(int new_len) 
	{if (len>0) Free(); len=new_len; val=new double[new_len];}
void Array::Free() {delete [] val; len=0;}
inline double Array::Elem(int i) 
	{assert(i>=0 && i<len ); return val[i];}
inline void Array::ChangeElem(int i, double x) 
	{assert(i>=0 && i<len); val[i]=x;}

И далее

Array a;
a.Alloc(10);
a.ChangeElem(3, 2.78);
double b = a.Elem(3);
a.Free();

C#
class Example
{
	static void Main()
	{
		System.Console.WriteLine("Hello, World!");
	}
}

Как вы успели заметить, пока что не все стили подключены(не имеют подсветки некоторые языки). Для лучшей раскраски предлагаем варианты.

P.s.:
Долго мучился над созданием выпадающей менюшки в IPB редакторе. Создал по образу и подобию шрифтов и размеров. Пока присутствует только в полном форматировании.
Надеюсь все найдут и опробуют по мере возможностей.

 

 

  • 0

#2 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 09 Август 2009 - 14:43

Вот за это огромное спасибо =) подсветка хорошая, сейчас код читать гораздо удобнее
  • 0

#3 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 09 Август 2009 - 14:43

супер!!!
а если html и css в одном блоке кода?
  • 0

#4 ZiTosS

ZiTosS
    Topic Starter
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Август 2009 - 16:36

sc2r2bey, html и css вместе отображаются нормально.
  • 0

#5 SeoMaster

SeoMaster
  • Пользователь
  • 283 сообщений
  • Репутация: 0

Отправлено 09 Август 2009 - 23:57

Спасибо, наконец-то какие-то нововведения на форуме, почаще бы ;)
  • 0

#6 ZiTosS

ZiTosS
    Topic Starter
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 15 Август 2009 - 15:40

Теперь форматирование кода доступно так же из быстрого ответа
http://www.masterweb...e-vozmozhnosti/
  • 0

#7 ZiTosS

ZiTosS
    Topic Starter
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Февраль 2010 - 21:11

Исправлен баг, при котором код растягивал ячейки форума, пришлось пожертвовать читабельностью длинных сообщений.
Раньше при строке кода большей длины, чем вмещается в ячейку, ячейка растягивалась до неимоверных размеров, пока не закончится самая длинная строк кода.
Думал сделаю простым использованием CSS overflow-x: auto, но если почитать спецификацию по тегу pre, то он использует white-space: pre;

PRE - Текст показывается с учетом всех пробелов и переносов, как они были добавлены разработчиком в коде HTML. Если строка получается слишком длинной и не помещается в окне браузера, то будет добавлена горизонтальная полоса прокрутки.

У меня полоса прокрутки не добавлялась. Пришлось заюзать JavaScript ;)

P.s.: Теперь хоть не буду подчищать чужой код от длинных строк.
  • 0

#8 ZiTosS

ZiTosS
    Topic Starter
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Февраль 2011 - 18:45

Исправлен баг зацикливания обработки кода с появлением бесконечной нумеровки. Из-за данной ошибки браузер мог либо выкинуть предложение о прекращении обработки сценария, либо выдать крушение.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru