Технический пост, резервирующий номера постов для возможного импорта истории из архива. Можно постить сюда замечания и предложения по оформлению и функционалу сайта.
>>1000093 И правда работает, спасибо, спасение.
>>1000097 181 спойлер и 1 удалённая картинка. Job's done.
В капче не работает "б", то есть ",".
>>1000102 Точнее, не работает ",", а "б"-то работает.
>>1000102 Fixed
Favicon kitaaa---!!
>>1000088 С escape-ами там, как оказалось, сравнительно просто всё. Написал вот через '~' escaping. '~' на что-то влияет только перед символами разметки (`|*|%|^|[) или в объялении пункта списка \n\r[#✶+-]. Может escape-ить сам себя, но только, когда это имеет смысл. А вот с блоками, их вложенностями и приоритетами, кажется, несколько сложнее. Но подумаю. Может, по удвоенному `-у сделаю.
Архив с кодом в картинке.
>>1000135 Спасибо, принял пока так. Я пытаюсь переписать парсер на нормальную, не-регексповую обработку, но это хорошо если на неделе. Могу скинуть черновик.
>>1000136 Скинь. Там даже если с регулярками, всё равно дорабатывать надо: не так просто оказалось, возможность escape-ить ~ неограниченное количество раз всё-таки нужна. Из-за этого, например, strtr-ом для ~` не обойтись, нужны будут изменения в callback-ах кода/латеха, а регулярка для парсинга кода будет выглядеть как-то (^|\G|[^~])(~~)*\K`([^~`]|~.)+?` так.
(^|\G|[^~])(~~)*\K`([^~`]|~.)+?`
>>1000137 function BBCode($string){ $lines = explode(PHP_EOL,$string); $in_ul = false; $in_ol = false; $block = []; foreach($lines as $line) { if (preg_match('^[\-\*] ([^\r\n])+)')){ if ($in_ol){ $in_ol = false; $output .= '</ol>'; } if (!$in_ul){ $in_ul = true; if ($block){ $output .= apply_format($block); $block = []; } $output .= '<ul>'; } $output .= '<li>'.apply_format([$matches[1]]).'</li>'; } else if (preg_match('^[+\#] ([^\r\n])+)')){ if ($in_ul){ $in_ul = false; $output .= '</ul>'; } if (!$in_ol){ $in_ol = true; if ($block){ $output .= apply_format($block); $block = []; } $output .= '<ol>'; } $output .= '<li>'.apply_format([$matches[1]])."</li>"; } else{ if ($in_ol){ $in_ol = false; $output .= '</ol>'; } if ($in_ul){ $in_ul = false; $output .= '</ul>'; } array_push($block, $line); } } $output .= apply_format($block); return $output; } function apply_format($lines){ $patterns = [ ['\[code]', '\[/code]', '<span class="inline-code">', '</span>', 1, inline_code_callback], ['\', '\', '<b>', '</b>', 1], ['\', '\', '<i>', '</i>', 1], ['\', '\', '<span style="text-decoration: underline;">', '</span>', 1], ['\', '\', '<strike>', '</strike>', 1], ['\', '\', '<span style="font-family: Mona,\'MS PGothic\' !important;">', '</span>', 1], ['\', '\', '<span class="spoiler">', '</span>', 1], ['\\', '\\', '<b>', '</b>', 0], ['\', '\', '<i>', '</i>', 0], ['', '', '<span class="spoiler">', '</span>', 0], ['\^\^', '\^\^', '<strike>', '</strike>', 0], ['', '', '<span class="inline-code">', '</span>', 0], ]; $stack = []; $pattern = "\n"; foreach($patterns as $pattern){ $pattern .= "|$pattern[1]"; } foreach($patterns as $pattern){ if ($pattern[1] != $pattern[0]){ $pattern .= "|$pattern[0]"; } } $pattern = "((?!~)~|)~+~~?($pattern)"; foreach($lines as $line) { preg_match($pattern, $line, $matches, PREG_OFFSET_CAPTURE); aray_unshift($matches) foreach($matches as $match){ ; } } } Разбиваем текст на строки, в каждой строке ищем начала и концы тегов. Если тег закрывающий, пытаемся закрыть последний тег, если совпадает. Если тег закрывающий, пытаемся закрыть, если последний открытый тег совпадает. Если открывающий, запоминаем позицию, кладём предыдущую подстроку на стек, и идём по текущей (можно рекурсией). На конце строки дропаем незакрытые инлайны, на конце блока дропаем вообще всё. В коде игнорируем всё кроме закрытия кода (+ надо перебивать : для ссылок). Списки считаются как отдельные блоки исключительно инлайнов. preg_match не может в /g, поэтому придётся ещё в цикл оборачивать.
^[\-\*] ([^\r\n])+)
^[+\#] ([^\r\n])+)
', '
>>1000138 Ах, да, оно так не работает. https://gist.github.com/yakui-lover/616e8bad552395cd031453c05e2eb596
Jus use pastebin clone, Luke.
https://pastebin.com/kf3a4kyu Попробовал сделать без разбиения по строкам. Вышло громоздко, хотя вроде работает. Проходимся по всем тегам типа ~~~~~~^^ или ~~~~~~[/b], смотрим, применимо или не применимо в текущем контексте, если применимо, то копируем ещё не скопированный текст до тега, и если не за-escape'лено, то либо открываем блок, либо закрываем блоки до нужного по стеку. Код escape'ит всё, кроме терминаторов кода и escape'ов к ним. Списки более-менее наравне с остальными тегами, хотя обрабатываются несколько отдельно.
Допустимо ли? >>/b/1000899
>>1000148 Кажется, не хентайнее этого эпизода прилии https://gelbooru.com/index.php?page=post&s=list&tags=md5%3a267af70a53630db7e1de70de943530bd Пусть это и версия, где пар отредактирован.
>>1000148 Под спойлером должно быть нормально. В худшем случае я задумаюсь о другом хостере картинок. >>1000147 Ну, давайте пробовать. test Скорее всего надо стили править если не инлайн-спаном делать. Я правильно читаю, что вмарк так тоже мультилайн становится? Я думал как раз его оставить действующим только внутри строки. И ws нигде не используется. Но на глас вроде всё верно.
test
>>1000150 > Я правильно читаю, что вмарк так тоже мультилайн становится? Да, *, **, ^^, `, %% все multiline-овые. Но так-то они multiline-овыми и раньше были же. Чуть усложнив код, можно коллапсить упомянутую вакабу по \r\n, нужно поменять проверки в начале for-а и поменять содержимое if-а для \r\n завершения списка. Но пока не могу понять смысл идеи. Разве чтобы можно было одну * в начале строки поставить, и оно само закрылось. Но тогда если кто-то по привычке попробует через * * сделать несколько линий курсивом, у него не получится, и ему на [i] и [/i] придётся менять. Думаю, можно добвать блок ``some text``, где символы форматирования будут игнорироваться:В array c описанием mark-ов добавить '``' => ['``', '', ''], и '[nofmt]' => ['\[nofmt]|\[\/nofmt]', '', '', '``', '[/nofmt]'],;В if, где $states['`'] && $mark != '`' || $states['[code]'] && $mark != '[/code]', добавть ещё две проверки. > И ws нигде не используется Wide [character] strings? Кажется, там достаточно обычных ASCIIшных функций, без mb и w префиксов.
'``' => ['``', '', ''],
'[nofmt]' => ['\[nofmt]|\[\/nofmt]', '', '', '``', '[/nofmt]'],
$states['`'] && $mark != '`' || $states['[code]'] && $mark != '[/code]'
>>1000152 А, я не ответил >Wide [character] strings? Нет, массив с таким именем. >Но пока не могу понять смысл идеи. Я думал вакаба-марк сделать только инлайном, потому что оно так работает на самой Вакабе. Но если ФБЕ оно мультилайн, то лучше совместимость, да.
Справку после этого обновите, господа. Ничего не понятно.
>>1000153 > Нет, массив с таким именем. Не используется, можно спокойно из кода убрать. Для вакабамарков завёл, наверное. >>1000154 Всё почти также. Основное изменение в том, что тильда (~) теперь символ разметки, который escape-ит другие тэги разметки (*, %%, [u] и так далее). Перед тэгом разметки, тильда может escape-ить сама себя. w~ww~~www~~~ ⟶ w~ww~~www~~~2~**4==4~**2 ⟶ 2**4==4**2*uwu~~* ⟶ uwu~ Справку напишу, когда формат будет фиксирован. Пока же есть некоторые проблемы. Сейчас ~ escape-ит именно тэг, не символ, что в случае с %%, ** и ^^ кое-что делает невозможным. Например, невозможно процентами заспоилерить "146%";В отличие от обычного FBE, что-нибудь типа "****" обработается, на выводе образуя HTML-элементы с пустым содержимым. Не знаю, нужно ли фиксить.
> Для вакабамарков завёл, наверное. И не наверное, а таки именно для них, судя по $ws[$k] = $pattern; в foreach($patterns as $k => $pattern){
$ws[$k] = $pattern;
foreach($patterns as $k => $pattern){
function BBCode($string){ $regex = '$(?:^|\G|[^~])\K~*(?:'; $patterns = [ "\r\n- " => ['\r\n\- ', '<li>', '</li>', '<ul>', '</ul>'], "\r\n* " => ['\r\n\* ', '<li>', '</li>', '<ul>', '</ul>'], "\r\n+ " => ['\r\n\+ ', '<li>', '</li>', '<ol>', '</ol>'], "\r\n# " => ['\r\n\# ', '<li>', '</li>', '<ol>', '</ol>'], '[nofmt]' => ['\[nofmt]|\[\/nofmt]', '', '', '``', '[/nofmt]'], '[code]' => ['\[code]|\[\/code]', '<code>', '</code>', '`', '[/code]'], '[b]' => ['\[b]|\[\/b]', '<b>', '</b>', '**', '[/b]'], '[i]' => ['\[i]|\[\/i]', '<i>', '</i>', '*', '[/i]'], '[u]' => ['\[u]|\[\/u]', '<span style="text-decoration: underline;">', '</span>', '', '[/u]'], '[s]' => ['\[s]|\[\/s]', '<strike>', '</strike>', '^^', '[/s]'], '[aa]' => ['\[aa]|\[\/aa]', '<span style="font-family: Mona,\'MS PGothic\' !important;">', '</span>', '', '[/aa]'], '[spoiler]' => ['\[spoiler]|\[\/spoiler]', '<span class="spoiler">', '</span>', '%%', '[/spoiler]'], '``' => ['``', '', ''], '`' => ['`', '<code>', '</code>'], '**' => ['\*\*', '<b>', '</b>'], '*' => ['\*', '<i>', '</i>'], '%%' =>['%%', '<span class="spoiler">', '</span>'], '^^' => ['\^\^', '<strike>', '</strike>'], ]; $bbs = array(); $bb_cl_to_op = array(); $lists = array(); $bb_to_w = array(); $w_to_bb = array(); $states = array(); $in_list = false; foreach($patterns as $k => $pattern){ if($k[0] == '['){ $bbs[$k] = $pattern; $bb_cl_to_op[$pattern[4]] = $k; if($pattern[3] != ''){ $bb_to_w[$k] = $pattern[3]; $w_to_bb[$pattern[3]] = $k; } } else if($k[0] == "\r") $lists[$k] = $pattern; $states[$k] = false; $regex .= $pattern[0] . '|'; } $regex .= '\r\n)$is'; $mark_stack = array(); $result = ''; // handle when it starts from a list declaration if(preg_match('/^~*[\*|\+|\-|\#] /', $string) == 1){ if($string[0] == '~') $string = substr($string, 1); else $string = "\r\n" . $string; } $length = strlen($string); $parsing_offset = 0; $copy_offset = 0; for($next_parsing_offset = 0; $parsing_offset < $length; $parsing_offset = $next_parsing_offset){ if(!preg_match($regex, $string, $match, PREG_OFFSET_CAPTURE, $parsing_offset)) break; $match = $match[0]; $match_length = strlen($match[0]); $next_parsing_offset = $match[1] + $match_length; $rtilda_pos = strrpos($match[0], '~'); $mark = $rtilda_pos === false ? $match[0] : substr($match[0], $rtilda_pos + 1); // continue if the mark is not applicable in the current context if(!$in_list && $mark == "\r\n") continue; if($states['``'] && $mark != '``' || $states['[nofmt]'] && $mark != '[/nofmt]') continue; if($states['`'] && $mark != '`' || $states['[code]'] && $mark != '[/code]') continue; if(array_key_exists($mark, $w_to_bb) && $states[$w_to_bb[$mark]]) continue; if(array_key_exists($mark, $bb_to_w) && $states[$bb_to_w[$mark]]) continue; if(array_key_exists($mark, $bb_cl_to_op) && !$states[$bb_cl_to_op[$mark]]) continue; if(array_key_exists($mark, $bbs) && $states[$mark]) continue; if($in_list && array_key_exists($mark, $lists) && !$states[$mark]) continue; // the mark is applicable, copy whatever was before and half the tildas $tilda_len = $rtilda_pos === false ? 0 : $rtilda_pos + 1; $to_copy = substr($string, $copy_offset, $match[1] + (int)($tilda_len / 2) - $copy_offset); if($states['`'] || $states['[code]']) $to_copy = strtr($to_copy, array("\t" => ' ', ' ' => ' ')); $result .= $to_copy; // if the mark is being escaped, set the offsets accordingly and move on // continue parsing from the second symbol of the current tag if(($tilda_len % 2) === 1){ $result .= $match[0][$tilda_len]; $copy_offset = $match[1] + $tilda_len + 1; $next_parsing_offset = $match[1] + $tilda_len + 1; continue; } // otherwise, handling the mark as active $copy_offset = $match[1] + $match_length; // first, handle the list marks, as they may result in both opening and closure if(array_key_exists($mark, $lists)){ if(!$in_list){ $result .= $lists[$mark][3]; $in_list = true; } if($states[$mark]){ do{ $c_st = array_pop($mark_stack); $result.= $patterns[$c_st][2]; $states[$c_st] = false; } while($c_st != $mark); } $result .= $lists[$mark][1]; array_push($mark_stack, $mark); $states[$mark] = true; continue; } if($mark == "\r\n"){ do{ $c_st = array_pop($mark_stack); $result.= $patterns[$c_st][2]; $states[$c_st] = false; } while(!array_key_exists($c_st, $lists)); $result.= $lists[$c_st][4]; $in_list = false; continue; } // now, if it is a non-list opening if(array_key_exists($mark, $states) && $states[$mark] == false){ $result .= $patterns[$mark][1]; $states[$mark] = true; array_push($mark_stack, $mark); continue; } // if is's a closure $till = array_key_exists($mark, $bb_cl_to_op) ? $bb_cl_to_op[$mark] : $mark; do { $c_st = array_pop($mark_stack); $result.= $patterns[$c_st][2]; $states[$c_st] = false; if(array_key_exists($c_st, $lists)){ $result.= $patterns[$c_st][4]; $in_list = false; } } while($mark_stack && $till != $c_st); } // finalize if needed if($copy_offset < $length){ $to_copy = substr($string, $copy_offset, $length - $copy_offset); if($states['`'] || $states['[code]']) $to_copy = strtr($to_copy, array("\t" => ' ', ' ' => ' ')); $result .= $to_copy; } while($mark_stack){ $c_st = array_pop($mark_stack); $result.= $patterns[$c_st][2]; $states[$c_st] = false; if(array_key_exists($c_st, $lists)){ $result.= $patterns[$c_st][4]; $in_list = false; } } return $result; }
>>1000165 Собственно, новая версия, где ~ escape'ит только первый символ тэга. То бишь, если перед тэгом поставить тильду, то parse'инг продолжается со второго его символа, если таковой есть. Также добавлены `` и [nofmt] — блоки, где отключается форматирование, чтобы с тильда-escape'ами в сложных случаях не возиться.
Добавить раздел "Разметка" в news.php. Форматирование через символ «_» на данный момент не поддерживается. поменять на Более полная информация о разметке находится тут. mark.html ниже кинуть в inc/pages. <div class="content"> <h2><div class="newssub">Wakaba-mark</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>**полужирное начертание**</td><td><b>полужирное начертание</b></td></tr> <tr><td>*курсивное начертание*</td><td><i>курсивное начертание</i></td></tr> <tr><td>`` (*-*) без форматирования ^^_^^ ``</td><td>`` (*-*) без форматирования ^^_^^ ``</td></tr> <tr><td>`int i = 2 * 4; \\ код`</td><td><code>int i = 2 * 4;\\ код</code></td></tr> <tr><td>%%спойлер%%</td><td><span class="spoiler">спойлер</span></td></tr> <tr><td>^^зачёркивание^^</td><td><s>зачёркивание</s></td></tr> <tr><td>`` (*-*) без форматирования ^^_^^ ``</td><td>`` (*-*) без форматирования ^^_^^ ``</td></tr> </table> <h2><div class="newssub">BBCode</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>[u]подчёркивание[/u]</td><td><span style="text-decoration: underline;">подчёркивание</span></td></tr> <tr><td>[aa]Mona,'MS PGothic'[/aa]</td><td><span style="font-family: Mona,'MS PGothic' !important;">Mona,'MS PGothic'</span></td></tr> <tr><td>[b]полужирное начертание[/b]</td><td><b>полужирное начертание</b></td></tr> <tr><td>[i]курсивное начертание[/i]</td><td><i>курсивное начертание</i></td></tr> <tr><td>[code]int i = 2 * 4; \\ код[/code]</td><td><code>int i = 2 * 4; \\ код</code></td></tr> <tr><td>[spoiler]спойлер[/spoiler]</td><td><span class="spoiler">спойлер</span></td></tr> <tr><td>[s]зачёркивание[/s]</td><td><s>зачёркивание</s></td></tr> <tr><td>[nofmt]без форматирования ^^_^^ [/nofmt]</td><td>без форматирования ^^_^^ </td></tr> </table> <h2><div class="newssub">Cписки</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>- Первый пункт<br>- Второй пункт</td><td><ul><li> Первый пункт</li><li> Второй пункт</li></ul></td></tr> <tr><td>* Первый пункт<br>* Второй пункт</td><td><ul><li> Первый пункт</li><li> Второй пункт</li></ul></td></tr> <tr><td>+ Первый элемент<br>+ Второй элемент</td><td><ol><li> Первый элемент</li><li> Второй элемент</li></ol></td></tr> <tr><td># Первый элемент<br># Второй элемент</td><td><ol><li> Первый элемент</li><li> Второй элемент</li></ol></td></tr> </table> <h2><div class="newssub">Escape-символ ~</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>2 ~* 2 = 4</td><td>2 * 2 = 4</td></tr> <tr><td>uwa~~</td><td>uwa~~</td></tr> <tr><td>*uwa~~*</td><td><i>uwa~</i></td></tr> <tr><td>~^^_~^^</td><td>^^_^^</td></tr> <tr><td>%%146~%%%</td><td><span class="spoiler">146%</span></td></tr> <tr><td>~**курсив~**</td><td>*<i>курсив*</i></td></tr> <tr><td>- Первый пункт~ <br>- Тоже первый пункт~<br>Тоже</td> <td><ul><li> Первый пункт<br>- Тоже первый пункт<br>Тоже</li></ul></td></tr> <tr><td>~- Не пункт списка</td> <td>- Не пункт списка</td></tr> </table> Способ избежать объявления списка, указанный в последней строке, работает только в начале сообщения. <h2><div class="newssub">Ссылки и цитирование</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>>>180000</td><td><a href="#180000">>>180000</a></td></tr> <tr><td>>>/b/188888</td><td><a href="#b180000">>>/b/188888</a></td></tr> <tr><td>>цитата</td><td><blockquote>>цитата</blockquote></td></tr> <tr><td>http://example.org</td><td><a href="http://example.org">http://example.org</a></td></tr> <tr><td>https://example.org</td><td><a href="https://example.org">https://example.org</a></td></tr> <tr><td>ftp://example.org</td><td><a href="ftp://example.org">ftp://example.org</a></td></tr> </table> <h2><div class="newssub">Особенности работы</div><div class="permalink"> </div></h2> <table border=1><tr><th>Отправляемое сообщение</th><th>Вывод</th></tr> <tr><td>2 * 2 = 4, курсив</td><td>2 <i> 2 = 4, курсив</i></td></tr> <tr><td>[b]*полужирный курсив</td><td><b><i>полужирный курсив</i></b></td></tr> <tr><td>**[i]полужирный курсив**[/i]</td><td><b><i>[i]полужирный курсив</i></b>[/i]</td></tr> <tr><td>*[i]курсив[/i]*</td><td><i>[i]курсив[/i]</i></td></tr> <tr><td>[i][i]курсив*[/i]</td><td><i>[i]курсив*</i></td></tr> <tr><td>[/i]~[/i]~~[/i]</td><td>[/i]~[/i]~~[/i]</td></tr> <tr><td>[i]~*~[i]курсив[/i]</td><td><i>~*~[i]курсив</i></td></tr> </table> </div><br>
<div class="content"> <h2><div class="newssub">Wakaba-mark</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>**полужирное начертание**</td><td><b>полужирное начертание</b></td></tr> <tr><td>*курсивное начертание*</td><td><i>курсивное начертание</i></td></tr> <tr><td>`` (*-*) без форматирования ^^_^^ ``</td><td>`` (*-*) без форматирования ^^_^^ ``</td></tr> <tr><td>`int i = 2 * 4; \\ код`</td><td><code>int i = 2 * 4;\\ код</code></td></tr> <tr><td>%%спойлер%%</td><td><span class="spoiler">спойлер</span></td></tr> <tr><td>^^зачёркивание^^</td><td><s>зачёркивание</s></td></tr> <tr><td>`` (*-*) без форматирования ^^_^^ ``</td><td>`` (*-*) без форматирования ^^_^^ ``</td></tr> </table> <h2><div class="newssub">BBCode</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>[u]подчёркивание[/u]</td><td><span style="text-decoration: underline;">подчёркивание</span></td></tr> <tr><td>[aa]Mona,'MS PGothic'[/aa]</td><td><span style="font-family: Mona,'MS PGothic' !important;">Mona,'MS PGothic'</span></td></tr> <tr><td>[b]полужирное начертание[/b]</td><td><b>полужирное начертание</b></td></tr> <tr><td>[i]курсивное начертание[/i]</td><td><i>курсивное начертание</i></td></tr> <tr><td>[code]int i = 2 * 4; \\ код[/code]</td><td><code>int i = 2 * 4; \\ код</code></td></tr> <tr><td>[spoiler]спойлер[/spoiler]</td><td><span class="spoiler">спойлер</span></td></tr> <tr><td>[s]зачёркивание[/s]</td><td><s>зачёркивание</s></td></tr> <tr><td>[nofmt]без форматирования ^^_^^ [/nofmt]</td><td>без форматирования ^^_^^ </td></tr> </table> <h2><div class="newssub">Cписки</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>- Первый пункт<br>- Второй пункт</td><td><ul><li> Первый пункт</li><li> Второй пункт</li></ul></td></tr> <tr><td>* Первый пункт<br>* Второй пункт</td><td><ul><li> Первый пункт</li><li> Второй пункт</li></ul></td></tr> <tr><td>+ Первый элемент<br>+ Второй элемент</td><td><ol><li> Первый элемент</li><li> Второй элемент</li></ol></td></tr> <tr><td># Первый элемент<br># Второй элемент</td><td><ol><li> Первый элемент</li><li> Второй элемент</li></ol></td></tr> </table> <h2><div class="newssub">Escape-символ ~</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>2 ~* 2 = 4</td><td>2 * 2 = 4</td></tr> <tr><td>uwa~~</td><td>uwa~~</td></tr> <tr><td>*uwa~~*</td><td><i>uwa~</i></td></tr> <tr><td>~^^_~^^</td><td>^^_^^</td></tr> <tr><td>%%146~%%%</td><td><span class="spoiler">146%</span></td></tr> <tr><td>~**курсив~**</td><td>*<i>курсив*</i></td></tr> <tr><td>- Первый пункт~ <br>- Тоже первый пункт~<br>Тоже</td> <td><ul><li> Первый пункт<br>- Тоже первый пункт<br>Тоже</li></ul></td></tr> <tr><td>~- Не пункт списка</td> <td>- Не пункт списка</td></tr> </table> Способ избежать объявления списка, указанный в последней строке, работает только в начале сообщения. <h2><div class="newssub">Ссылки и цитирование</div><div class="permalink"> </div></h2> <table border=1><tr><th>Ввод</th><th>Вывод</th></tr> <tr><td>>>180000</td><td><a href="#180000">>>180000</a></td></tr> <tr><td>>>/b/188888</td><td><a href="#b180000">>>/b/188888</a></td></tr> <tr><td>>цитата</td><td><blockquote>>цитата</blockquote></td></tr> <tr><td>
http://example.org
</td><td><a href="
">
</a></td></tr> <tr><td>
https://example.org
ftp://example.org
</a></td></tr> </table>
<h2><div class="newssub">Особенности работы</div><div class="permalink"> </div></h2> <table border=1><tr><th>Отправляемое сообщение</th><th>Вывод</th></tr> <tr><td>2 * 2 = 4, курсив</td><td>2 <i> 2 = 4, курсив</i></td></tr> <tr><td>[b]*полужирный курсив</td><td><b><i>полужирный курсив</i></b></td></tr> <tr><td>**[i]полужирный курсив**[/i]</td><td><b><i>[i]полужирный курсив</i></b>[/i]</td></tr> <tr><td>*[i]курсив[/i]*</td><td><i>[i]курсив[/i]</i></td></tr> <tr><td>[i][i]курсив*[/i]</td><td><i>[i]курсив*</i></td></tr> <tr><td>[/i]~[/i]~~[/i]</td><td>[/i]~[/i]~~[/i]</td></tr> <tr><td>[i]~*~[i]курсив[/i]</td><td><i>~*~[i]курсив</i></td></tr> </table> </div><br>
>>1000170 Добавлено с изменениями: ":" заменяется на "& #58;" чтобы отключить ссылки в коде/noformat.
>>1000171 Yatta! BTW, у меня опечатки в markdown.html. Простите # Там две одинаковых строки "`` (*-*) без форматирования ^^_^^ ``", наверное, стоит оставить последнюю; # У обеих тех строк в поле столбца "Вывод" слева и справа стоит лишний "``"; # Под заголовком "Особенности работы" в столбце "Вывод" стоит лишний "[i]" в поле [i]полужирный курсив[/i]
>>1000174 > # Странно. УМВР.
>>1000175 Should be fixed. Я убрал часть переменных в continue-проверках.
>>1000178 Теперь работает. Проезд тоже оплачивается. > `` (*-*) без форматирования ^^_^^ `` У левого и правого "``" стоит пробел. Либо эти пробелы убрать, либо в "Вывод" добавить " ". Похожая ситуация с "[/nofmt]".
Ну чтож, дополнительные пожелания по капче ещё есть, или в /b/ тоже включать как есть?
>>1000182 Включай. Есть там одна картинка, где дЪвочка совсем далеко изображена сбоку и лица не видать. Где-то в 2022-ом году в /b/ 410-го был пост в залоченном треде с пожеланиями по фапче. Если грабёр такую метаинформацию сохраняет, о залоченности, можно было бы найти... Проскроллил тут 14 140 картинок из /b/ 410-го и немного сдался.
>>1000183 Могу разве текстопоиск дать. Закрытость треда можно увидеть только на репарсинге, а граббер его только для автомодерации делает. Можно было бы расширить, да.
Сложный вопрос: как называть этот чан. С родителем очень естественно вышло, просто и гениально. А вот тут-то вот вот... This one makes you scratch your head.
>>1000218 Если подходить совсем формально, то если родитель ойчан, то мы ойчи-чан.
У меня иногда Animapcha image вместо самой анимаптчи.
Длину имён файлов, слишком малую, тоже наконец пофиксить бы. >>1000221 Хм, тоже замечено. Думалось что прокси на этойстороне виноват, но может там файлик битый.
>>1000221 То были временные файлы от редактирования текстовых. Вроде починено. >>1000222 Не будет ли слишком некрасиво совсем без обрезания?
>>1000227 Ну, попробуем. На время миграции БД постить в разделе не получится правда.
>>1000229 Как-то так.
>>1000227 Наверное, будет полезно, если имя файла с кадром, скажем, [SubsPlease] Maougun Saikyou no Majutsushi wa Ningen datta - 01 (1080p) [F17D1F04] 00:17:04.900.webp Будет входить вместе с номером эпизода и временной меткой. Можно сделать, увеличив предел, по которому ведётся обрезка. Можно сделать, вырезая часть имени файла из середины, оставив limit прежним. Можно сделать, чтобы по наведению курсора на имя файла, оно показывалось чуть ниже полностью, как на vichan-е. Также стоит сделать обрезание через mb_strlen и, соответственно, поменять тип поля в базе, если уже не сделано. Судя по >>1000230, всё-таки лучше делать отображаемое имя ограниченным по длине.
>>1000232 Подкрутил на стороне рендера. Раз уж мы тут, мне очень удобным кажется функционал скачивания с оригинальным именем файла. Я мог бы это к текущей ссылке-имени прикрепить, но наверное лучше отдельной иконкой как у 4chanX?
>>1000235 Лучше отдельной иконкой, мне кажется.
>>1000184 Там, наверное, встречается case-insensitive подстрока хинат. Есть ли такие посты?
>>1000239 Только в АКБ-треде: https://410.yakuji.moe/b/res/107994.html#161346
>>1000240 Спасибо за содействие! ЭхЪ. А ОП-посты со словом капч/фапч, например?
>>1000241 https://410.yakuji.moe/b/res/201935.html https://410.yakuji.moe/b/res/195616.html (тред какого-то перебежчика, нюкнут после второго поста) https://410.yakuji.moe/b/res/181293.html
>>1000242 https://410.yakuji.moe/b/res/195616.html 404 отдаёт. Ладно, спасибо за содействие. Может быть, он банально был вне периода работы архива.
>Sorry, your message is too long. Message length: 18258, maximum allowed length: 16384
>>1000246 А какой лимит хотели бы видеть лично Вы? Так-то уже в два раза больше обычного, емнип.