PHP
/**
* SHPHP - Syntax Highlighter in PHP
* Developer: kirik [kirik-san@users.sourceforge.net]
* Website: http://sourceforge.net/projects/shphp/ (all details you can find here)
* Version: 0.1.2
**/
Class SHPHP {
// the result array
private static $str_stack;
// pattern stack - each element is a language pattern
private static $patt_stack;
// the current position in input array
private static $pos;
// current style - name of current style, or null if there is no current style
private static $curr_style;
private static $language;
// Vars to automatic load LDF (language definition files)
public static $languages;
public static $langs_dir = null;
/**
Highlights all elements containing code in a text string.
@param $input a text string
@param $language a language definition array
@return highlighted string
**/
public static function highlight($input, $language)
{
if(empty($input))
{
return null;
}
if(is_array($language))
{
self::$language = $language;
}
else
{
// Set default LDF dir
if(self::$langs_dir === null)
{
self::$langs_dir = dirname(__FILE__) . '/langs';
}
if(isset(self::$languages[$language]))
{
self::$language = self::$languages[$language];
}
elseif(file_exists($include = self::$langs_dir . '/sh_' . $language . '.php')) // Autoload LDF (if possible)
{
include($include);
self::$language = $sh_languages[$language];
}
}
}
}
HTML
<?php
error_reporting(E_ALL | E_STRICT);
header('Content-Type: text/html; charset=cp1251');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>SHPHP - Syntax Highliter in PHP</title>
<style>
pre.sh_sourceCode {
border: 1px solid #ccc;
overflow: auto;
padding: 10px 0 10px 10px;
color: #000;
font-weight: normal;
font-style: normal;
/* font-size: 13px; */
}
/* if, break, for, return.... */
pre.sh_sourceCode .sh_control {
color: #ACAD23;
font-weight: normal;
font-style: normal;
}
</style>
<script>
/**
* Event component
* Developer: KiriK
**/
var CTevent = {
attach: function (obj, event, fn) {
if(obj.attachEvent) {
obj.attachEvent(event, fn);
} else if(obj.addEventListener) {
obj.addEventListener(this.ff(event), fn, false);
} else {
alert('Your browser does not support events.');
}
},
detach: function (obj, event, fn) {
if(obj.detachEvent) {
obj.detachEvent(event, fn);
} else if(obj.addEventListener) {
obj.removeEventListener(this.ff(event), fn, false);
} else {
alert('Your browser does not support events.');
}
},
ff: function (str) {
return str.replace(/on/i, '');
}
};
</script>
</head>
<body>
<?php
// инклюдим необходимые файлы
include('./includes/sh_functions.php');
include('./includes/sh_main.php');
/// Автоматическая подгрузка языков
// // определяем папку с языками (для автоматической подгрузки языковых файлов):
// SHPHP::$langs_dir = './langs';
/// Ручная подгрузка языков
// или подключаем все языки, и определяем их в классе:
include('./langs/sh_php_mix.php');
include('./langs/sh_sql_mod.php');
include('./langs/sh_css_mod.php');
include('./langs/sh_js_mod.php');
include('./langs/sh_php_mod.php');
SHPHP::$languages = $sh_languages;
SQL
SELECT `m`.`msg_id` as `msg_id`,
`m`.`msg_status` as `msg_status`,
`m2u`.`msg_read` as `msg_read`
FROM `{$_db['prefix']}messages` AS `m`
INNER JOIN `{$_db['prefix']}messages2users` AS `m2u` ON `m`.`msg_id` = `m2u`.`msg_id`
WHERE `m2u`.`m2u_id` = {$this->msg_id} AND `m2u`.`recipient_id` = {$this->author_id}
LIMIT 1
Спустя 2 минуты, 42 секунды (5.11.2009 - 20:49) twin написал(а):
о, а я как раз ищу где позябать

<?php
/**
* Загрузка файлов
*/
if($ok && $form['f5'] == $_SESSION['f5'])
{
$values = array();
foreach($_FILES as $files => $val)
{
$img = new IRB_Uploader($form['fon']);
$img -> set_language($LangUploader);
$fileinfo = $img -> create_image($val['tmp_name']);
$size += $fileinfo['size'];
if($size > MAX_FILE_SIZE * 1024)
$_SESSION['info'][] = array(
'info' => LIMIT_EXCEEDED,
'error' => 1
);
else
$_SESSION['info'][] = $fileinfo;
if($fileinfo['error'] == 0)
{
$fileinfo = escape_string($fileinfo);
$values[] = "('', NOW(),
'". $fileinfo['filename'] ."',
'". $fileinfo['width_full'] ."',
'". $fileinfo['height_full'] ."',
'". $fileinfo['width'] ."',
'". $fileinfo['height'] ."')";
}
unset($img);
}
if(count($values))
query("INSERT INTO `". DB_PREFIX ."photo`
(`id`, `date`, `filename`, `width_full`, `heigth_full`, `width`, `height`)
VALUES ". implode(', ', $values)
, __FILE__, __LINE__);
redirect();
}
$data = array();
$row = '';
if(isset($_SESSION['info']))
{
$cont = get_tpl('add_rows');
foreach($_SESSION['info'] as $finfo => $images)
{
$images['full'] = ($images['error'] == 0)? src($images['filename'], 'full'):src('no.png', 'images');
$images['icon'] = ($images['error'] == 0)? src($images['filename'], 'icon'):src('no.png', 'images');
$row .= parse_tpl($cont, $images);
}
session_unset();
}
else
{
$cont = get_tpl('welcome');
$data['language'] = $language;
$row = parse_tpl($cont, $data);
}
$_SESSION['f5'] = $form['f5'] = rand(100,1000);
Спустя 34 секунды (5.11.2009 - 20:49) kirik написал(а):
Обратные слэши, экранирование:
Да, вот тут проблемо.. мож magic quotes как-то влияют..
$var = "n";
echo 'test's';
SELECT * FROM `table` WHERE `name` = 'test's'
Да, вот тут проблемо.. мож magic quotes как-то влияют..
Спустя 1 минута, 7 секунд (5.11.2009 - 20:51) twin написал(а):
Вот еще один косячек. И сурьёзный... Надо как то табуляторы на пробелы менять по ходу движения. Разьезжается с табами.
Спустя 36 секунд (5.11.2009 - 20:51) twin написал(а):
И чего не красненько?

Спустя 3 минуты, 42 секунды (5.11.2009 - 20:55) kirik написал(а):
Цитата (twin @ 5.11.2009 - 12:51) |
Надо как то табуляторы на пробелы менять по ходу движения. |
Они вроде бы тут поменялись.. может наоборот не нужно менять?

Спустя 59 секунд (5.11.2009 - 20:56) kirik написал(а):
Цитата (twin @ 5.11.2009 - 12:51) |
И чего не красненько? |
Иде не красненько?
Спустя 3 минуты, 2 секунды (5.11.2009 - 20:59) kirik написал(а):
Строка JS:
--- не работают JS тэги.. вру, я кривой..
- отлично, так и должно быть (что вторая строчка не подсветилась) - это ошибка JS синтаксиса
var str = "test
test";
<script>
var str = "test
test";
</script>
- отлично, так и должно быть (что вторая строчка не подсветилась) - это ошибка JS синтаксиса
Спустя 4 минуты, 17 секунд (5.11.2009 - 21:03) kirik написал(а):
CSS (однострочный):
#messenger{width:774px; border-right:1px solid #ccc; color:#3c3c3c; margin-bottom:-10px}#messenger .folders{width:140px}#messenger .folders a{display:block; padding:3px 0 3px 20px; text-decoration:none}#messenger .folders hr{border:0; height:1px; background:#ccc}#messenger .folders input{border:1px solid #ccc; width:113px; margin:3px 2px; background:transparent url('../images/mess_find.gif') no-repeat 1px 2px; padding-left:18px; color:#3c3c3c; font-size:11px}#messenger .folders .inbox{background:transparent url('../images/mess_inbox.gif') no-repeat 3px 4px}#messenger .folders .outbox{background:transparent url('../images/mess_outbox.gif') no-repeat 3px 4px}#messenger .folders .selected{background-color:#678db2; color:#fff}#messenger .folders .refresh{background:transparent url('../images/mess_refresh.gif') no-repeat 3px 3px}#messenger .folders .delete{background:transparent url('../images/mess_delete_mini.gif') no-repeat 3px 4px}
.txt {
height: 17px;
border: 1px solid #cecbc6;
color: #4c4c4c;
font-weight: bold;
font-size: 12px;
margin: 1px;
width: 180px;
background: #f6f6f6;
}
.txt:hover, .txt:focus {
border: 1px solid #ccc;
background: #fff;
}
.large {
font-weight: normal;
font-size: 22px;
height: 26px;
width: 100%;
}
Спустя 44 секунды (5.11.2009 - 21:04) twin написал(а):
Табулятроы вот:
<?php
$text = 'Это восемь пробелов';
$text = 'А это два таба';
А вот не красненько...
Спустя 2 минуты, 58 секунд (5.11.2009 - 21:07) twin написал(а):
А в мазиле норм... Опера моя не видит подсветку
Спустя 1 минута, 54 секунды (5.11.2009 - 21:09) kirik написал(а):
Цитата (twin @ 5.11.2009 - 13:07) |
Опера моя не видит подсветку |
Кэш похоже обновить нужно - css не подгрузился.
Цитата (twin @ 5.11.2009 - 13:04) |
Табулятроы вот |
Просто если весь код с табами будет - он покажется нормально, так же как и если весь будет с пробелами. А если менять табы на пробелы, то тогда код лучше выглядеть не будет..
Спустя 18 минут, 50 секунд (5.11.2009 - 21:28) glock18 написал(а):
чих-пых:
жээс:
Свернутый текст
<?php
/**
* LangpackGen model.
* Provides functionality regarding js langpack scaffolding.
* @author Vasiliy Naumov <nomail.com>
* @since 2009/10/27
*/
class LangpackGen
{
/**
* Error array.
*
* @var array
*/
private $errors = array();
/**
* Language completness status array.
*
* @var array
*/
private $statuses = array();
/**
* Available list types.
*
* @var array
*/
private $availableTypes = array('controller', 'page');
/**
* Runs langpack generation. Optional parameter may contain languages, which should be ignored.
*
* @param array $exceptions Languages to be ignored.
* @return array
* Return array elements:
* - 'success' (boolean) true if no errors occured.
* - 'exceptions' (array) if language presented in $exceptions argument is found, it will be pushed to this array.
* - 'errors' (array) errors occured during generation.
* - 'statuses' (array) language pack generation statuses.
*/
public function run($exceptions = array())
{
$result = array(
'success' => false,
'exceptions' => array(),
);
try {
$localeDir = self::getLocaleDir(true);
$localeList = scandir($localeDir);
foreach ($localeList as $lang) {
if ($lang[0] == '.') {
// missing ., .svn and .. directories
continue;
}
if (in_array($lang, $exceptions)) {
$result['exceptions'][] = $lang;
continue;
}
self::createLangpack($lang, true, false);
}
} catch (Exception $e) {
// no more actions needed. error is already added
}
$result['errors'] = $this->getErrors();
$result['statuses'] = $this->getStatuses();
$result['success'] = empty($result['errors']);
return $result;
}
/**
* Creates single langpack js file.
*
* @param string $lang Language name.
* @param boolean $checkLangDirExistance Whether to check lang dir is valid.
* @param boolean $checkLocaleDirExistance Whether to check locale dir is valid.
*/
public function createLangpack($lang, $checkLangDirExistance = true, $checkLocaleDirExistance = false)
{
$langPack = array();
try {
// $localeDir = self::getLocaleDir($checkLocaleDirExistance);
$langDir = self::getLangDir($lang, $checkLangDirExistance, $checkLocaleDirExistance);
foreach ($this->availableTypes as $type) {
$typeDir = $langDir . DIRECTORY_SEPARATOR . $type;
if (file_exists($typeDir) && is_dir($typeDir)) {
$langList = scandir($typeDir);
foreach ($langList as $list) {
if ($list[0] == '.') {
// missing ., .svn and .. directories
continue;
}
$listFile = $typeDir . DIRECTORY_SEPARATOR . $list;
if (!is_file($listFile)) {
$this->errors[] = 'Impossible to include non-file item: ' . $listFile;
continue;
}
// if (!is_executable($listFile)) {
// $this->errors[] = 'Language list file is not executable: ' . $listFile;
// continue;
// }
$words = include($listFile);
if (!is_array($words)) {
$this->errors[] = 'Invalid language list file: ' . $listFile;
continue;
}
$listName = substr($list, 0, strrpos($list, '.'));
$langPack[$type][$listName] = $words;
}
if (!empty($langPack)) {
$this->statuses[$lang] = self::generateJsLangPack($lang, $langPack);
}
else {
$this->errors[] = 'Empty langpack received: ' . $langDir;
}
}
else {
$this->errors[] = $type . ' directory for ' . $lang . ' language has not been found';
}
}
} catch (Exception $e) {
// no more actions needed. error is already added
}
}
/**
* Returns locale dir full path.
* If $checkExistance parameter is true, the checkLocaleDir method will be called at first.
* Note that 'check' methods may throw exception.
*
* @param boolean $checkExistance Whether to check directory existance.
* @return string
*/
protected function getLocaleDir($checkExistance = true)
{
if ($checkExistance) {
self::checkLocaleDir();
}
return Engine_Config::getInstance()->documentRoot . DIRECTORY_SEPARATOR . 'locale';
}
/**
* Checks whether locale dir is valid.
* If directory is not valid, exception will be thrown and error added.
* @throws Exception
*/
protected function checkLocaleDir()
{
$localeDir = self::getLocaleDir(false);
if (!file_exists($localeDir) || !is_dir($localeDir)) {
$this->errors[] = 'Locale directory does not exist: ' . $localeDir;
throw new Exception();
}
}
/**
* Returns language dir full path.
* Calls self::getLocaleDir method passing it $checkLocaleDirExistance argument.
* If $checkExistance parameter is true, the self::checkLangDir method will be called at first.
* Note that 'check' methods may throw exception.
*
* @param boolean $checkExistance Whether to check lang directory existance.
* @param boolean $checkLocaleDirExistance Whether to check locale directory existance.
* @return string
*/
protected function getLangDir($lang, $checkExistance = true, $checkLocaleDirExistance = false)
{
$localeDir = self::getLocaleDir($checkLocaleDirExistance);
if ($checkExistance) {
self::checkLangDir($lang, false);
}
return $localeDir . DIRECTORY_SEPARATOR . $lang;
}
/**
* Check whether the language dir is valid.
* If dir is not valid, exception will be thrown.
*
* @param string $lang
* @param boolean $checkLocaleDirExistance
*/
protected function checkLangDir($lang, $checkLocaleDirExistance = true)
{
$localeDir = self::getLocaleDir($checkLocaleDirExistance);
$langDir = $localeDir . DIRECTORY_SEPARATOR . $lang;
if (!file_exists($langDir) || !is_dir($langDir)) {
$this->errors[] = 'Language directory does not exist: ' . $langDir;
throw new Exception();
}
if (!is_readable($langDir)) {
$this->errors[] = 'Language directory is not readable: ' . $langDir;
throw new Exception();
}
}
/**
* Generates single langpack and saves it at target directory.
* Throws exception if unable to write to target directory.
* Returns true if file was generated succesfully, otherwise false.
*
* @param string $lang
* @param array $langPack
* @return boolean
*/
public function generateJsLangPack($lang, $langPack)
{
try {
$targetDir = Engine_Config::getInstance()->documentRoot . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'scripts' . DIRECTORY_SEPARATOR . 'langpack';
if (!file_exists($targetDir) || !is_dir($targetDir)) {
$this->errors[] = 'Js langpack directory does not exist: ' . $targetDir;
throw new Exception();
}
if (!is_writable($targetDir)) {
$this->errors[] = 'Js langpack directory is not writable: ' . $targetDir;
throw new Exception();
}
$jsCode = "if (Core && Core.translate) {n" .
" Core.translate.language = '" . addslashes($lang) . "';n" .
" Core.translate.list = 'all';n" .
" Core.translate.type = 'controller';n" .
" Core.translate.langpack['" . addslashes($lang) . "'] = " . json_encode($langPack) . ";" .
"}";
return (boolean) file_put_contents($targetDir . DIRECTORY_SEPARATOR . $lang . '.js', $jsCode);
} catch (Exception $e) {
}
}
/**
* Returns error array.
* @return array
*/
public function getErrors()
{
return $this->errors;
}
/**
* Returns status array.
* @return array
*/
public function getStatuses()
{
return $this->statuses;
}
}
жээс:
Свернутый текст
<script type="text/javascript">
var Core = {
addEvent : function(obj, evType, fn)
{
if(obj.addEventListener)
{
obj.addEventListener(evType, fn, false);
return true;
}
else if(obj.attachEvent)
return obj.attachEvent("on" + evType, fn);
return false;
},
uploader : null
};
AjaxUploader = function (options) {
if (!options['form'])
throw new "error";
this.form = options['form'];
var uploader = this;
Core.addEvent(this.form, 'submit', function() {
uploader.sendFiles(uploader);
});
this.startCallback = typeof options['onStart'] == 'function' ? options['onStart'] : null;
this.completeCallback = typeof options['onComplete'] == 'function' ? options['onComplete'] : null;
}
AjaxUploader.prototype.sendFiles = function(uploader) {
uploader.createFrame();
if (typeof uploader.startCallback == 'function')
// {
return uploader.startCallback();
// }
else
return true;
}
AjaxUploader.prototype.createFrame = function() {
var frameId;
do {
frameId = 'f' + Math.floor(Math.random() * 99999);
} while (document.getElementById(frameId));
var d = document.createElement('DIV');
d.innerHTML = '<iframe style="display:none" src="about:blank" id="' + frameId + '" name="' + frameId + '"></iframe>';
var uploader = this;
document.body.appendChild(d);
var i = document.getElementById(frameId);
Core.addEvent(i, 'load', function() {
uploader.frameOnLoad(frameId);
});
if (typeof this.completeCallback == 'function') {
i.onComplete = this.completeCallback;
}
this.form.setAttribute('target', frameId);
}
AjaxUploader.prototype.frameOnLoad = function(id) {
var i = document.getElementById(id),
d;
if (i.contentDocument)
d = i.contentDocument;
else if (i.contentWindow)
d = i.contentWindow.document;
else
d = window.frames[id].document;
if (d.location.href == "about:blank")
return;
if (typeof(i.onComplete) == 'function')
i.onComplete(d.body.innerHTML);
}
</script>
Спустя 4 минуты, 4 секунды (5.11.2009 - 21:32) kirik написал(а):
glock18
твой код даже редактируется теперь
твой код даже редактируется теперь

Спустя 4 минуты, 21 секунда (5.11.2009 - 21:36) glock18 написал(а):
kirik
аха ))) круто, мне нравится )
аха ))) круто, мне нравится )
Спустя 12 минут, 19 секунд (5.11.2009 - 21:48) twin написал(а):
Цвета непривычные...
А ваще круто...
А с табами прошлая подсветка нормально обходилась. Знач есть какой то выход.

А ваще круто...
А с табами прошлая подсветка нормально обходилась. Знач есть какой то выход.
Спустя 18 минут, 2 секунды (5.11.2009 - 22:06) WhiteKnight написал(а):
наконец то дружелюбная подсветка.
p.s.
даешь веб 2.0

p.s.
даешь веб 2.0
Спустя 2 часа, 9 минут, 40 секунд (6.11.2009 - 00:16) kirik написал(а):
Еще раз тест экранирования
И спецсимвол:
$var = "\n";
echo 'test\'s';
SELECT * FROM `table` WHERE `name` = 'test\'s'
И спецсимвол:
echo "\$var";
Спустя 8 минут, 14 секунд (6.11.2009 - 00:24) kirik написал(а):
Цитата (WhiteKnight @ 5.11.2009 - 14:06) |
даешь веб 2.0 |
вебдваноль - не тру

Цитата (twin @ 5.11.2009 - 13:48) |
А с табами прошлая подсветка нормально обходилась. Знач есть какой то выход. |
Хе) Выход-то всегда есть

Спустя 44 минуты, 3 секунды (6.11.2009 - 01:08) kirik написал(а):
Че там с табами..? Меняем табы на 4 пробела? Иль на 5?
Спустя 3 минуты (6.11.2009 - 01:11) glock18 написал(а):
На 5.5 луче. в память о последней умершей версии ишака

Спустя 11 минут, 8 секунд (6.11.2009 - 01:22) kirik написал(а):
Цитата (glock18 @ 5.11.2009 - 17:11) |
На 5.5 луче. в память о последней умершей версии ишака |
Почтим память! Значит 5.5

Спустя 8 часов, 32 минуты, 54 секунды (6.11.2009 - 09:55) Michael написал(а):
Свернутый текст
function koren($numb, $koren)
{
// $numb - строка bc с числом, $koren - значение корня
$ost = doubleval($numb);
if ($ost != INF) return pow($ost, 1/$koren);
$ch = pow(10,300);
$bch = bcpow('10','300');
$mnoz = pow($ch, 1/$koren); // выведенный из под корня множитель
$rez = 1;
$vih = false;
while (! $vih)
{//echo 'x<br>';
$ostbc = bcdiv($numb, $bch, 100);
$rez *= $mnoz;
$ost = doubleval($ostbc);
if ($ost != INF)
{
$rez *= pow($ost, 1/$koren);
$vih = true;
}
else $numb = $ostbc;
}
return $rez;
}
<script type="text/javascript">
function menuClass(dynamic,poloz,pref,otstup)
{
this.dynamic=false;///////////
if (typeof(dynamic)!=undefined) {
if (dynamic) {
this.dynamic=true;
}
}
this.poloz='goriz';////////////
if (typeof(poloz)!=undefined) {
if (poloz=='vertik') {
this.poloz='vertik';
}
}
this.pref='';
if (typeof(pref)=='string') {
this.pref=pref;
}
this.otstup=0;
if (typeof(otstup)!='undefined'&&isFinite(otstup)) {
this.otstup=parseInt(otstup);
}
var self=this; // Замыкание
this.mainmenu=new Array();
this.tek_el=new Array();
this.tek_pl1=null;
this.tek_pl2=null;
this.timeout=0;
this.tektime=0;
this.createMainMenu=function (ind, one_pic, two_pic, text, what_do)
{
this.mainmenu[ind]=new Object();
this.mainmenu[ind].one_pic=new Image();
this.mainmenu[ind].one_pic.src=this.pref+one_pic;
this.mainmenu[ind].two_pic=new Image();
this.mainmenu[ind].two_pic.src=this.pref+two_pic;
this.mainmenu[ind].text=text;
this.mainmenu[ind].what_do=what_do;
this.mainmenu[ind].podmenu=new Array();
}
// ...
</script>
this.tek_el=new Array();
this.tek_pl1=null;
this.tek_pl2=null;
this.timeout=0;
this.tektime=0;
this.createMainMenu=function (ind, one_pic, two_pic, text, what_do)
{
this.mainmenu[ind]=new Object();
this.mainmenu[ind].one_pic=new Image();
this.mainmenu[ind].one_pic.src=this.pref+one_pic;
this.mainmenu[ind].two_pic=new Image();
this.mainmenu[ind].two_pic.src=this.pref+two_pic;
this.mainmenu[ind].text=text;
this.mainmenu[ind].what_do=what_do;
this.mainmenu[ind].podmenu=new Array();
}
Про табы twin уже заметил, потому что сам ни одного не вставишь так за тебя редактор десяток вставит ...
JS код в html да и еще обернутый в <script> - люди будут по старому кидать в php.
Может малоиспользуемый # по умолчанию для JS определить.
Насчет цветов - может для php стандарт оставить(как в хелпе)?
А для JS всякие this new тоже лучшее бы не только "жирностью" отличать, но и цветом.
P.S. Потом все доделаешь, ссылочку скачать the last edition не забудь где-то обронить

Спустя 44 минуты, 56 секунд (6.11.2009 - 10:40) twin написал(а):
Про цвета я тож думаю луче стандартные пыховские оставить. Слишком тяжко так читать. Совсем непривычно.
Спустя 7 часов, 55 минут, 42 секунды (6.11.2009 - 18:36) kirik написал(а):
Цитата (Michael @ 6.11.2009 - 01:55) |
Может малоиспользуемый # по умолчанию для JS определить. |
Скоро будут кнопки CSS и JS.
Цитата (Michael @ 6.11.2009 - 01:55) |
Насчет цветов - может для php стандарт оставить(как в хелпе)? |
Да там в хелпе подсветка вообще не помогает, 4 цвета какие-то: синий (названия функций, переменных; числа), красный (строки), зеленый (символы, ключевые слова, операторы итд), оранжевый (комменты). Я бы не стал менять на стандартную подсветку, но такой жесткой привычки у меня нет, поэтому могу смириться

2FatCat а может можно как-то через настройки пользователя сделать выбор цвет подсветки (как со счетчиком "Не пью:")?
Спустя 12 минут, 52 секунды (6.11.2009 - 18:49) twin написал(а):
Комменты хотя бы желтые... сливается с кодом. А операторы совсем не подсвечиваются? И фореч какой то болезненно-бледно-зеленый... Повеселей нельзя его?

Спустя 7 минут, 48 секунд (6.11.2009 - 18:57) glock18 написал(а):
Мне так нравится подсветка

Спустя 22 минуты, 55 секунд (6.11.2009 - 19:20) kirik написал(а):
Цитата (twin @ 6.11.2009 - 10:49) |
Комменты хотя бы желтые... сливается с кодом. |
Дык это.. Комментарии они на то и есть, чтобы если ты хочешь их видеть - они будут, нет - читай код. Есть 3 типа комментов:
// обычный коммент
/* тоже обычный */
# еще один обычный
/** коммент с подсветками переменных:
* @author ...
* @param ...
* @return ...
**/
/// просто важный коммент - "Обрати внимание!"
Цитата (twin @ 6.11.2009 - 10:49) |
И фореч какой то болезненно-бледно-зеленый... Повеселей нельзя его? |
Можно


ЗЫ кстати про бледность комментов - можно просто подложку сделать не серую, а белую - виднее будет. Или черную вообще, тогда будет андеграунд-стайл

Спустя 5 дней, 4 часа, 50 минут, 18 секунд (12.11.2009 - 00:10) Gabriel написал(а):
Не.... с черной ето будет както жестоко.
С копированием кода ничего странного никто не наблюдал? у меня после вставки в любой редактор код идет чють-ли не спложным потоком
С копированием кода ничего странного никто не наблюдал? у меня после вставки в любой редактор код идет чють-ли не спложным потоком
Спустя 13 часов, 40 минут, 8 секунд (12.11.2009 - 13:50) Gabriel написал(а):
в ИЕ 7 половина кода отображаеться как ссылка
http://phpforum.ru/index.php?act=ST&f=125&t=22675&st=0
http://phpforum.ru/index.php?act=ST&f=125&t=22675&st=0
Спустя 5 часов, 28 минут, 40 секунд (12.11.2009 - 19:19) kirik написал(а):
Цитата (Gabriel @ 12.11.2009 - 05:50) |
половина кода отображаеться как ссылка |
Да, есть такая проблемка.. Я FatCat уже попросил чтобы он сделал парсинг BB кодов после того как код подсвечивается. Иначе получается что код подсвечен, а в нем потом парсятся еще и BB тэги.
Спустя 17 часов, 27 минут, 45 секунд (13.11.2009 - 12:46) FatCat написал(а):
Цитата (kirik @ 12.11.2009 - 20:19) |
Я FatCat уже попросил чтобы он сделал парсинг BB кодов после того как код подсвечивается. |
Так и сделано. Сначала подсветка, потом парсинг кодов.
function convert($in=array( 'TEXT' => "", 'SMILIES' => 0, 'CODE' => 0, 'SIGNATURE' => 0, 'HTML' => 0)) {
global $ibforums, $DB;
$this->in_sig = $in['SIGNATURE'];
$txt = $in['TEXT'];
//--------------------------------------
// Returns any errors as $this->error
//--------------------------------------
// Remove session id's from any post
$txt = preg_replace( "#(\?|&|;|&)s=([0-9a-zA-Z]){32}(&|;|&|$)?#e", "\$this->regex_bash_session('\\1', '\\3')", $txt );
//--------------------------------------
// convert <br> to \n
//--------------------------------------
$txt = preg_replace( "/<br>|<br \/>/", "\n", $txt );
//--------------------------------------
// Are we parsing iB_CODE and do we have either '[' or ']' in the
// text we are processing?
//--------------------------------------
if ( $in['CODE'] == 1 ) {
//---------------------------------
// Do [CODE] tag
//---------------------------------
// $txt = preg_replace( "#\[php\](.+?)\[/php\]#ies" , "\$this->regex_php_tag('\\1')" , $txt );
// $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->regex_code_tag('\\1')", $txt );
$txt = preg_replace('#\[(php|code|html|js|css|sql)\](.+)\[/\\1\]#iesU', "\$this->highlighter('\\2', '\\1')", $txt);
Спустя 18 минут, 28 секунд (13.11.2009 - 13:05) FatCat написал(а):
Господа, у нас проблема...
Только что попробовал запостить всего 14 Кб кода - и подвесил сервер минут на 5... Другим браузером в это время лицезрел 502-ю страницу. И в результате пустое сообщение...
Что там с ресурсоемкостью? Или это просто совпало?
Только что попробовал запостить всего 14 Кб кода - и подвесил сервер минут на 5... Другим браузером в это время лицезрел 502-ю страницу. И в результате пустое сообщение...
Что там с ресурсоемкостью? Или это просто совпало?
Спустя 3 минуты, 32 секунды (13.11.2009 - 13:08) Gabriel написал(а):
FatCat
наверное просто совпало у меня с утра из 5ти открытых страниц 3 были 502ми
наверное просто совпало у меня с утра из 5ти открытых страниц 3 были 502ми
Спустя 2 часа, 56 минут, 42 секунды (13.11.2009 - 16:05) FatCat написал(а):
Цитата (Gabriel @ 13.11.2009 - 14:08) |
у меня с утра из 5ти открытых страниц 3 были 502ми |
Вот я и думаю, может когда я вижу 502-ю - это кто-то в этот момент большой листинг кода запузыривает.

Хотя, фиг его знает.
Тестирую под денвером, который раз в 5 более тормознутый, чем здешний сервер, 50 Кб кода сожрал секунды за 2...
Спустя 3 часа, 25 минут, 12 секунд (13.11.2009 - 19:30) kirik написал(а):
Цитата (FatCat @ 13.11.2009 - 04:46) |
Так и сделано. Сначала подсветка, потом парсинг кодов. |
Там наверное по-сложнее немного нужно.. Чтобы код в php|css|html|... тэгах не отрабатывался еще и bb кодами. У меня есть идея, сегодня - завтра напишу.
Цитата (FatCat @ 13.11.2009 - 05:05) |
Что там с ресурсоемкостью? |
Да по-быстрее геши было. Мне кажется что совпадение. Ща попробую тоже подвесить

------------
40 кб кода - моментом, а вот 120 кб почему-то отдали пустое сообщение..
Спустя 3 часа, 45 минут, 27 секунд (13.11.2009 - 23:16) Joker написал(а):
а может взять цвета подсветки кодов из дрима? а то насколько я знаю не малая часть людей в нём работает и он будет как то привычнее....
Спустя 12 минут, 21 секунда (13.11.2009 - 23:28) kirik написал(а):
Joker
не видел подсветку в дриме.. Да какая разница вообще какой цвет, главное чтобы видно было все.
не видел подсветку в дриме.. Да какая разница вообще какой цвет, главное чтобы видно было все.
Спустя 51 минута, 24 секунды (14.11.2009 - 00:19) Gabriel написал(а):
kirik
+ пиццот
Joker
оно привычнее но не оригинально......
П.С а линии у нас будут?
+ пиццот
Joker
оно привычнее но не оригинально......
П.С а линии у нас будут?
Спустя 35 минут, 50 секунд (14.11.2009 - 00:55) kirik написал(а):
Цитата (Gabriel @ 13.11.2009 - 16:19) |
П.С а линии у нас будут? |
Я кажись там просил че-нить придумать для линий, никто не откликнулся

Спустя 6 минут, 4 секунды (14.11.2009 - 01:01) Gabriel написал(а):
ну чтож бум ждать ( долго и настойчиво ждать )
яб подумал да наврядли придумаеться


Спустя 1 час, 40 минут (14.11.2009 - 02:41) Joker написал(а):
Цитата (Gabriel @ 14.11.2009 - 03:19) |
оно привычнее но не оригинально...... |
говорить на документированном языке тоже не оригинально вот попробуй албанский выучи...
Цитата (kirik @ 14.11.2009 - 02:28) |
не видел подсветку в дриме.. Да какая разница вообще какой цвет, главное чтобы видно было все. |
Ну вот не скажи но это моё мнение но когда из дрима выхожу и лажу по сайтам и в разных цветах разные коды иногда даже функции некоторые не узнаю.
Спустя 6 минут, 20 секунд (14.11.2009 - 02:48) FatCat написал(а):
Цитата (kirik @ 13.11.2009 - 20:30) |
40 кб кода - моментом, а вот 120 кб почему-то отдали пустое сообщение.. |
Аналогично. Начиная кил с 60 кердык. По денвером без проблем сожрал 200 Кб.
Значит дело в памяти. Тут 24 Мб, а под денвером хоть гиг может жрать.
С другой стороны нефига тут портянки кода развешивать немерянные. 40 Кб за глаза хватит.
Спустя 7 минут, 6 секунд (14.11.2009 - 02:55) Gabriel написал(а):
Joker
ну ты конечно сравнил банан с пальцем
ну ты конечно сравнил банан с пальцем
Спустя 27 минут, 45 секунд (14.11.2009 - 03:23) kirik написал(а):
Цитата (FatCat @ 13.11.2009 - 18:48) |
С другой стороны нефига тут портянки кода развешивать немерянные. 40 Кб за глаза хватит. |
Я кстати думал предложить сделать ограничение по размеру кода (еще давно). Но все равно это непорядок, когда появляются недокументировании фичи

Попробую поставить у себя 20мб, гляну мож че заоптимизить можно еще.
Цитата (Joker @ 13.11.2009 - 18:41) |
когда из дрима выхожу и лажу по сайтам и в разных цветах разные коды иногда даже функции некоторые не узнаю |
Окей, а что делать тем, кто не юзает дримвивер?

Спустя 8 часов, 56 минут, 9 секунд (14.11.2009 - 12:19) FatCat написал(а):
Цитата (kirik @ 14.11.2009 - 04:23) |
непорядок, когда появляются недокументировании фичи |
Можно урезать разрешенный размер сообщения, и фича станет документированной: вместо пустого поста будет выдаваться сообщение об ошибке - слишком большое сообщение.
Сейчас все лимиты сняты, швыряй до 7 Мб (пробовал, пролезает).
Спустя 1 час, 48 минут, 34 секунды (14.11.2009 - 14:07) twin написал(а):
В дреме подсветка похожа на дефолтную php. У Кирила лучше получилось, подсвечиваются функции и переменные разными цветами. Мне тож не совсем уютно было сначала, а сейчас очень нравится. Только комменты вышибают, привык к рыжим))