Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 16:26

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - О расцветке Форт-исходников на форуме
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
...тестовый скрипт временно отключен...
Сообщение Добавлено: Ср май 09, 2007 17:58
  Заголовок сообщения:   Ответить с цитатой
profiT писал(а):
Расцвечивать JS-ом -- это не очень хорошо. А вдруг я js у себя отключу? (например именно щас так и есть)

просто хотелось помочь, схему уже набросал, работает. С другой стороны этот подход снижает трафик и нагрузку на сервер.
требует минимум доработок существующего форума. :)

При отключенных JS не будет подсветки :( зато все остальное будет.
Сообщение Добавлено: Ср май 09, 2007 14:33
  Заголовок сообщения:   Ответить с цитатой
Цвета из pro.hrd схемы расцветки (та что используется в блоге) :

текст #000000
строки #0000ff
числа #008c00
комментарии #808080
слова #000084 (bold)
IMMEDIATE слова #800000
Сообщение Добавлено: Ср май 09, 2007 12:36
  Заголовок сообщения:   Ответить с цитатой
Проблема у меня сейчас в том, что в regexpах надо каким-то образом указывать начало и конец слова, а они не обязательно пробелы...

Ну, и слова, по идее надо как-то иначе перекомпоновать в списки,
чтобы было нормально, а не как бог на душу положил...
кислотнозеленый -- от того, что он в предпоследнем списке $words[9]

а буковки a и b попадают под попытку расцветить числа

числа сейчас просто отключу, чтобы не мешались...
THEN проглотило от того, что за ним нету пробела...
Сообщение Добавлено: Ср май 09, 2007 12:31
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Попробовать, как он работает, можно на http://fforum.winglion.ru/colorer/test.php


Код:
[colorer]
: ^2 ( a b -- )
12 DUP * SWAP IF ROT ELSE THEN
S" gf" ;
[/colorer]

IF и ELSE синие и почему-то зачёркнуты (тэг <s>). А THEN -- чёрный.

Весь стековый комментарий не выделен. Зато внутри помечены кислотно-зелёным только "a" и "--".

По цветам -- это долгая история. Лучше сначала обеспечить само срабатывание.

(видимо, придётся во второй раз в жизни попробовать на PHP что-то сделать)
Сообщение Добавлено: Ср май 09, 2007 12:21
  Заголовок сообщения:   Ответить с цитатой
AlexF
По поводу Colorer'а -- это то что мы сразу предлагали. Но Winglion описал выше почему не может так делать.

Расцвечивать JS-ом -- это не очень хорошо. А вдруг я js у себя отключу? (например именно щас так и есть)

(при этом к Сагалевской разработке отношусь строго положительно, хорошая вещь)
Сообщение Добавлено: Ср май 09, 2007 12:15
  Заголовок сообщения:   Ответить с цитатой
цвета заданы отбалды, поэтому, прошу предлагать варианты (желательно сразу с указанием RGB кодов)
Сообщение Добавлено: Ср май 09, 2007 12:02
  Заголовок сообщения:   Ответить с цитатой
Ерунда какя-то. Вроде, постил последний вариант функции, а моего сообщения не видно :(

последний вариант colorer.php:
Код:
<?php


function colorer($text){

// слова с < > #  = ' обрабатываются отдельно!
// слова
$words[0] = 'CLOSE-FILE CREATE-FILE-SHARED CREATE-FILE DELETE-FILE FILE-POSITION FILE-SIZE FORTH-WORDLIST GET-CURRENT GET-ORDER INCLUDE-FILE OPEN-FILE-SHARED OPEN-FILE READ-FILE READ-LINE REPOSITION-FILE RESIZE-FILE SEARCH-WORDLIST SET-CURRENT SET-ORDER SOURCE-ID TO-LOG WRITE-FILE WRITE-LINE';
$words[] = '0</ 0<>/ 0= 0! << >> -> 1+ 2+ 1- 2- D+ D. D0= D< D>S S>D C! C, C/L C@ C@ >BODY >IN >NUMBER >R -ROT -TRAILING <# <> +! ", */ #>';
$words[] = '#S #TIB */MOD /MOD 2/ 2>R FM/MOD R/O R/W SM/REM U>D UM/MOD W/O';
$words[] = '! .S (.") (ABORT") * + , - . .0 ?COMP 2DROP 2DUP 2LITERAL 2OVER 2R> 2R@ 2SWAP ?DUP @ ABORT ABS ACCEPT ALIGN ALIGNED ALLOCATE ALLOT ALSO AND ASCIIZ> AT BASE BETWEEN BL BLK BUFFER: BYE CATCH CELL CELL+ CELL- CELLS CHAR CHAR+ CHARS CLITERAL CMOVE CMOVE> COMPARE CONTEXT COUNT CR CURRENT DABS DECIMAL DEFER DEFINITIONS DEPTH DIGIT DNEGATE DP DROP DUMP DUP EKEY EKEY? EMIT ENVIRONMENT? END-CODE ERASE EXECUTE EXIT EVALUATE FALSE FIELD FILL FIND FORTH FREE HANDLER HEADER HERE HEX HIDE HLD HOLD IMMEDIATE INCLUDED INTERPRET INVERT IS KEY KEY? LATEST LEAVE LITERAL LSHIFT M* MAX MIN MOD MOVE NAME> NEGATE NIP NLIST NOOP NOT ONLY OR ORDER OVER PAD PARSE PICK PREVIOUS QUIT R0 ROLL R> R@ RDROP RECURSE REFILL RESIZE ROT RP! RP@ RSHIFT S0 SEARCH SIGN SKIP SLITERAL SMUDGE SOURCE SP! SP@ SPACE SPACES STATE SWAP THROW TIB TRUE TUCK TYPE U. U/ U< U> UM* UMOD W! W, W@ WARNING WITHIN WORD WORDLIST WORDS XOR COMPILE INCLUDE VOCS NextWord SFIND HALT OK LT LTL';
$words[] = 'F! F* F+ F. F, F- F/ F< F= F> F@ FABORT FABS FALIGN FALIGNED FDEPTH FDROP FDUP FEXP FLN FLG FLITERAL FLOATS FMAX FMIN FNEGATE';
$words[] = '!nt @nt br+ br- br0 ddo decode-2int decode-int decode-phys decode-string device-name DICTLIST encode+ encode-2int encode-bytes encode-int encode-phys encode-string end0 end1 ex ex+ ex- ex0 external finish-device headers if+ if- if0 my-self NAMEBASE new-device PROPERTY rp TVOCABULARY';
$words[] = 'OF ENDOF CASE END-CASE ENDCASE IF ELSE THEN BEGIN WHILE REPEAT BEGIN UNTIL AGAIN RECURSE ?DO DO +LOOP LOOP UNLOOP I J LEAVE DOES> {{ }}';
$words[] = ': ... WINAPI: CREATE VARIABLE USER CONSTANT VOCABULARY VECT VALUE FVALUE -- CODE REQUIRE';
$words[] = '> < = \\\' #';

// color_o[] -- открытие выделения (можно добавить не только цвет, но и bold и italic)
// color_c[] -- закрытие выделения

$color_о[0] = '<font color=#000088>';$color_c[0] = '</font>';
$color_о[] = '<font color=#008800>'; $color_c[] = '</font>';
$color_о[] = '<font color=#880000>'; $color_c[] = '</font>';
$color_о[] = '<font color=#0000FF>'; $color_c[] = '</font>';
$color_о[] = '<font color=#00FF00>'; $color_c[] = '</font>';
$color_о[] = '<font color=#FF0000>'; $color_c[] = '</font>';
$color_о[] = '<font color=#0000FF><s>'; $color_c[] = '</s></font>';
$color_о[] = '<font color=#00FF00><i>'; $color_c[] = '</i></font>';
$color_о[] = '<font color=#FFFF00><b>'; $color_c[] = '</b></font>';

// замена через через unix-регулярные выражения

// замена управляющих символов

$text = str_replace('>', '&gt;', $text);
$text = str_replace('<', '&lt;', $text);
$text = str_replace('\\'.chr(39), chr(39), $text);

// обезьянничаем regexp из ббкода
   $text = preg_replace(
      "#\[colorer\](.*?)\[/colorer\]#si",
      "<pre>\\1</pre>", $text);

// строки
$text = preg_replace("#S.\"(.*?).\"#si", "<font color=orange>S\"\\1\"</font>", $text);
$text = preg_replace("#\..\"(.*?).\"#si", "<font color=orange>.\"\\1\"</font>", $text);

// коментарий, начинающийся с /
//  $text = preg_replace("#\n\/ .* \n"#si", "<font color=darkyellow>\\1</font>", $text);


// $text = preg_replace("#(0-9A-F)#si", "<font color=green>\\1</font>", $text);
// числа (не работают нормально!)
// $text = preg_replace("#(\d|A|B|C|D|E|F).\s#si", " <font color=lightgreen>\\1</font> ", $text);

// убрать лишние слеши
$text = str_replace('\"', '"', $text);
$text = str_replace('\\\'', '\'', $text);


// собственно расцвечивание

$w=0; // номер массива слов и цвета для расцветки

while (isset($words[$w])){ // пока есть слова:
   $xx = $words[$w];
   // замена управляющих символов html в расцвечиваемых словах
   $xx = str_replace('>', '&gt;', $xx);
   $xx = str_replace('<', '&lt;', $xx);
   $mas = split((chr(32)),$xx); // вытаскиваем слова в массив
   // echo "<hr>".$mas[1].$mas[2].$mas[3];
   $i=1;
   while (isset($mas[$i])){ // пока есть слова, заменяем:
   // для слов окруженных пробелами
   $text = str_replace(" $mas[$i] "," $color_о[$w]$mas[$i]$color_c[$w] ",$text);

   // для слов в конце строки
   $text = str_replace(" $mas[$i]".'\n'," $color_о[$w]$mas[$i]$color_c[$w]".'\n',$text);
   // для слов в начале строки
   $text = str_replace('\n'."$mas[$i] ",'\n'."$color_о[$w]$mas[$i]$color_c[$w] ",$text);
   // для одиночных слов
   $text= str_replace('\n'."$mas[$i]\n",'\n'."$color_о[$w]$mas[$i]$color_c[$w]".'\n',$text);
   $i++;
   //  /^stroka$/ - строка с началом и концом
   //$text = str_replace(" $mas[$i] "," $color_о[$w]$mas[$i]$color_c[$w] ",$text);
};
$w++;
};

$text = str_replace(" CREATE "," <font color=#FF0000>CREATE</font> ",$text);

//  $text = str_replace(' # ', '<b>#</b>', $text);

return ($text);};

?>

Попробовать, как он работает, можно на http://fforum.winglion.ru/colorer/test.php

в окошко вводится тестовый код, окруженный тегами [colorer] [/colorer]
и получается некий результат
Сообщение Добавлено: Ср май 09, 2007 11:55
  Заголовок сообщения:   Ответить с цитатой
с запуском бинарника - не хочется рисковать.
Мало ли чего произойдет, и выкинут с хоста из-за какого-нибудь левого бага...

К тому же, мне не кажется слишком тяжелым способ раскрашивания через php-функцию.
Начало уже сделал, а дальше посмотрим.
Сообщение Добавлено: Ср май 09, 2007 10:58
  Заголовок сообщения:   Ответить с цитатой
описание подключения colorer-а к форуму: http://forum.dklab.ru/about/todo/ThereIsAnIdeaToAddRaskraskuForPiecesOfACode.html
но есть один недостаток -- требует установки и запуска бинарника

Есть уже разработанный JS -скрипт который прямо в браузере выполняет подсветку синтаксиса. Пока не разбирался : http://softwaremaniacs.org/soft/highlight/ но описание заманчиво :)

поставил FF расширение, не срабатывает:
- нет Forth в списке поддерживаемых языков :(
- фрагменты кода оформлены без тегов
Код:
< pre >< code >...< /code >< /pre >
и поэтому скрипт не срабатывает...

Думаю, что использование этого скрипта -- самый оптимальный вариант.

Шо скаже шановне панство? :)
Сообщение Добавлено: Ср май 09, 2007 10:50
  Заголовок сообщения:   Ответить с цитатой
forth@km.ru писал(а):
учитывая один из базовых принцпов кодинга на Форте -- расширение до задаче-ориентированного языка -- сделать подцветку нереально Smile


Tak это, что, значит, бросать это "грязное дело?"

forth@km.ru писал(а):
учитывая популярность этого форумного движка (phpbb если не ошибаюсь), разве еще не сделали автоколорер для тега code ?


Не понял... А как же первое утверждeние про нереальность? :shock:
Сообщение Добавлено: Ср май 09, 2007 08:58
  Заголовок сообщения:   Ответить с цитатой
WingLion писал(а):
примерно понял, что надо, буду думать, как это на php сделать...

учитывая популярность этого форумного движка (phpbb если не ошибаюсь), разве еще не сделали автоколорер для тега code ?
Сообщение Добавлено: Ср май 09, 2007 08:18
  Заголовок сообщения:  Re: О расцветке Форт-исходников на форуме  Ответить с цитатой
WingLion писал(а):
Начинаю попытку делать расцветку для форт-исходников на форуме.

учитывая один из базовых принцпов кодинга на Форте -- расширение до задаче-ориентированного языка -- сделать подцветку нереально :-)
Сообщение Добавлено: Ср май 09, 2007 08:15
  Заголовок сообщения:   Ответить с цитатой
Вот. Список слов по категориям. Всё остальное в схеме расцветок Colorer'а распознаётся регулярными выражениями.
Код:
forWord
CLOSE-FILE CREATE-FILE-SHARED CREATE-FILE DELETE-FILE FILE-POSITION FILE-SIZE FORTH-WORDLIST GET-CURRENT GET-ORDER INCLUDE-FILE OPEN-FILE-SHARED OPEN-FILE READ-FILE READ-LINE REPOSITION-FILE RESIZE-FILE SEARCH-WORDLIST SET-CURRENT SET-ORDER SOURCE-ID TO-LOG WRITE-FILE WRITE-LINE
forWord
0</ 0<>/ 0= 0! << >> -> 1+ 2+ 1- 2- D+ D. D0= D< D>S S>D C! C, C/L C@ C@ >BODY >IN >NUMBER >R -ROT -TRAILING <# <> +! ", */ #>
forWord
#S #TIB */MOD /MOD 2/ 2>R FM/MOD R/O R/W SM/REM U>D UM/MOD W/O
forWord
! .S # (.") (ABORT") * + , - . .0 ?COMP 2DROP 2DUP 2LITERAL 2OVER 2R> 2R@ 2SWAP < = > ?DUP @ ABORT ABS ACCEPT ALIGN ALIGNED ALLOCATE ALLOT ALSO AND ASCIIZ> AT BASE BETWEEN BL BLK BUFFER: BYE CATCH CELL CELL+ CELL- CELLS CHAR CHAR+ CHARS CLITERAL CMOVE CMOVE> COMPARE CONTEXT COUNT CR CURRENT DABS DECIMAL DEFER DEFINITIONS DEPTH DIGIT DNEGATE DP DROP DUMP DUP EKEY EKEY? EMIT ENVIRONMENT? END-CODE ERASE EXECUTE EXIT EVALUATE FALSE FIELD FILL FIND FORTH FREE HANDLER HEADER HERE HEX HIDE HLD HOLD IMMEDIATE INCLUDED INTERPRET INVERT IS KEY KEY? LATEST LEAVE LITERAL LSHIFT M* MAX MIN MOD MOVE NAME> NEGATE NIP NLIST NOOP NOT ONLY OR ORDER OVER PAD PARSE PICK PREVIOUS QUIT R0 ROLL R> R@ RDROP RECURSE REFILL RESIZE ROT RP! RP@ RSHIFT S0 SEARCH SIGN SKIP SLITERAL SMUDGE SOURCE SP! SP@ SPACE SPACES STATE SWAP THROW TIB TRUE TUCK TYPE U. U/ U< U> UM* UMOD W! W, W@ WARNING WITHIN WORD WORDLIST WORDS XOR COMPILE INCLUDE VOCS NextWord SFIND HALT OK LT LTL
forWord
F! F* F+ F. F, F- F/ F< F= F> F@ FABORT FABS FALIGN FALIGNED FDEPTH FDROP FDUP FEXP FLN FLG FLITERAL FLOATS FMAX FMIN FNEGATE FSWAP
forExtWords
!nt @nt br+ br- br0 ddo decode-2int decode-int decode-phys decode-string device-name DICTLIST encode+ encode-2int encode-bytes encode-int encode-phys encode-string end0 end1 ex ex+ ex- ex0 external finish-device headers if+ if- if0 my-self NAMEBASE new-device PROPERTY rp TVOCABULARY
forResWord
OF ENDOF CASE END-CASE ENDCASE IF ELSE THEN BEGIN WHILE REPEAT BEGIN UNTIL AGAIN RECURSE ?DO DO +LOOP LOOP UNLOOP I J LEAVE DOES> {{ }}
forWord
: ' ... WINAPI: CREATE VARIABLE USER CONSTANT VOCABULARY VECT VALUE FVALUE -- CODE REQUIRE


(что такое forWord -- не знаю, за что купил.. В смысле что выдрал из xml-ки)
Сообщение Добавлено: Вт май 08, 2007 23:32
  Заголовок сообщения:   Ответить с цитатой
примерно понял, что надо, буду думать, как это на php сделать...

начал делать php-функцию. Пока она вот такая:
Код:
function colorer($text){
// immediate слова
$immediate[0] = "IF";
$immediate[] = "THEN";
$immediate[] = "ELSE";

// начало расцветки
   $text = str_replace('[colorer]','<pre>',$text);
// конец расцветки
   $text = str_replace('[/colorer]','</pre>',$text);
// проверки на правильную последовательность тегов - пока нету

// цикл с выделением IMMEDIATE слов
$i = 0;
while (isset($immediate[$i])){
   $text =
// заменить все вхождения слова $immediate[$i] на подсвеченные
str_replace($immediate[$i],'[color=red]'.$immediate[$i].'[/color]',$text);
$i++;
}

return ($text);};

Сообщение Добавлено: Вт май 08, 2007 21:24

Часовой пояс: UTC + 3 часа [ Летнее время ]


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB