LINUX.ORG.RU

[quote] | [q]


0

1

Я долго не решался написать эту тему, долго пытался приучится писать

[quote]
но терпение кончилось - ну долго писать такой тег, долго и лень. Почему бы не заменить его на более простое
[q]
?



Последнее исправление: cyberpunk (всего исправлений: 2)

долго писать такой тег, долго и лень

Все уже привыкли.

Почему бы не заменить его на более простое

Менять еще более лень. Замени сам, отправь макскому.

mopsene ★★★
()

Запили как альтернативу quote, если очень хочется.

Deleted
()
Ответ на: комментарий от coldy

Не ДНК. У буржуйских линуско-троллей это аналогично нашему «вдоль».

DNA - Down, not across.

mopsene ★★★
()
Ответ на: комментарий от mopsene

Замени сам, отправь макскому.

Заменил, но не знаю как отправить «максому», опубликую тут (изменен этот файл):

Код

/*
 * Copyright 1998-2010 Linux.org.ru
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package ru.org.linux.util.formatter;

import org.springframework.stereotype.Service;
import ru.org.linux.util.StringUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Формирует сообщение для сохранения в базе
 * Основная функции: экранирование тэга code и выделение цитат
 */
@Service
public class ToLorCodeFormatter {

  private static final String NL_REGEXP = "\r?\n";

  /**
   * Форматирует текст
   * @param text текст
   * @param quoting выделять ли в тексте цитаты
   * @return отфарматированный текст
   */
  public String format(String text, boolean quoting) {
    String newText = text.replaceAll("\\[(/?code(:?=[\\w\\s]+)?)\\]", "[[$1]]");
    if(quoting) {
      return quote(newText);
    } else {
      return fixNL(newText);
    }
  }

  private static String fixNL(String text) {
    return text.replaceAll(NL_REGEXP, "[br]\n");
  }

  public static final Pattern QUOTE_PATTERN = Pattern.compile("^(\\>+)");


  protected String quote(String text) {
    StringBuilder buf = new StringBuilder();
    String[] lines = text.split("(\\r?\\n)");
    int globalNestingLevel = 0;
    int currentLine = 0;

    for(String line : lines) {
      currentLine = currentLine + 1;
      if(line.isEmpty()) {
        if(globalNestingLevel > 0) {
          buf.append(StringUtil.repeat("[/q]", globalNestingLevel));
          globalNestingLevel = 0;
        } else {
          buf.append("[br]");
        }
        continue;
      }
      Matcher m = QUOTE_PATTERN.matcher(line);
      if(m.find()) {
        int nestingLevel = m.group(1).length();
        if(globalNestingLevel == 0) {
          buf.append(StringUtil.repeat("[q]", nestingLevel));
          globalNestingLevel = nestingLevel;
        } else if(nestingLevel < globalNestingLevel) {
          buf.append(StringUtil.repeat("[/q]", globalNestingLevel - nestingLevel));
          globalNestingLevel = nestingLevel;
        } else if(nestingLevel > globalNestingLevel) {
          buf.append(StringUtil.repeat("[q]", nestingLevel - globalNestingLevel));
          globalNestingLevel = nestingLevel;
        }
        buf.append(line.substring(nestingLevel));
        if(currentLine < lines.length) {
          buf.append("[br]");
        }
      } else {
        if(globalNestingLevel > 0) {
          buf.append(StringUtil.repeat("[/q]", globalNestingLevel));
          globalNestingLevel = 0;
        }
        buf.append(line);
        if(currentLine < lines.length) {
          buf.append("[br]");
        }
      }
    }
    if(globalNestingLevel > 0) {
      buf.append(StringUtil.repeat("[/q]", globalNestingLevel));
    }
    return buf.toString();
  }

}

cyberpunk
() автор топика
Ответ на: комментарий от cyberpunk

Лучше не замени, а сделай альтернативное цитирование. Все-таки некоторым будут сложно привыкать к новому. Отправить просто, так же как и с любим гитом работаешь.

mopsene ★★★
()
Ответ на: комментарий от mopsene

так же как и с любим гитом работаешь

Я не разу не работал с гитами :) Ладно, хай с ней, пусть будет [quote]

cyberpunk
() автор топика
Ответ на: комментарий от mopsene

А все, дошло, просто зарегаться нужно было :) Ок, а как альтернативное то сделать, я жаву не знаю так что можете смеяться, главное скажите правильно или нет если сделать так «наобум»:

/*
 * Copyright 1998-2010 Linux.org.ru
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package ru.org.linux.util.formatter;

import org.springframework.stereotype.Service;
import ru.org.linux.util.StringUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Формирует сообщение для сохранения в базе
 * Основная функции: экранирование тэга code и выделение цитат
 */
@Service
public class ToLorCodeFormatter {

  private static final String NL_REGEXP = "\r?\n";

  /**
   * Форматирует текст
   * @param text текст
   * @param quoting выделять ли в тексте цитаты
   * @return отфарматированный текст
   */
  public String format(String text, boolean quoting) {
    String newText = text.replaceAll("\\[(/?code(:?=[\\w\\s]+)?)\\]", "[[$1]]");
    if(quoting) {
      return quote(newText);
    } else {
      return fixNL(newText);
    }
  }

  private static String fixNL(String text) {
    return text.replaceAll(NL_REGEXP, "[br]\n");
  }

  public static final Pattern QUOTE_PATTERN = Pattern.compile("^(\\>+)");


  protected String quote(String text) {
    StringBuilder buf = new StringBuilder();
    String[] lines = text.split("(\\r?\\n)");
    int globalNestingLevel = 0;
    int currentLine = 0;

    for(String line : lines) {
      currentLine = currentLine + 1;
      if(line.isEmpty()) {
        if(globalNestingLevel > 0) {
          buf.append(StringUtil.repeat("[/quote]","[/q]", globalNestingLevel));
          globalNestingLevel = 0;
        } else {
          buf.append("[br]");
        }
        continue;
      }
      Matcher m = QUOTE_PATTERN.matcher(line);
      if(m.find()) {
        int nestingLevel = m.group(1).length();
        if(globalNestingLevel == 0) {
          buf.append(StringUtil.repeat("[quote]","[q]", nestingLevel));
          globalNestingLevel = nestingLevel;
        } else if(nestingLevel < globalNestingLevel) {
          buf.append(StringUtil.repeat("[/quote]","[/q]", globalNestingLevel - nestingLevel));
          globalNestingLevel = nestingLevel;
        } else if(nestingLevel > globalNestingLevel) {
          buf.append(StringUtil.repeat("[quote]","[q]", nestingLevel - globalNestingLevel));
          globalNestingLevel = nestingLevel;
        }
        buf.append(line.substring(nestingLevel));
        if(currentLine < lines.length) {
          buf.append("[br]");
        }
      } else {
        if(globalNestingLevel > 0) {
          buf.append(StringUtil.repeat("[/quote]","[/q]", globalNestingLevel));
          globalNestingLevel = 0;
        }
        buf.append(line);
        if(currentLine < lines.length) {
          buf.append("[br]");
        }
      }
    }
    if(globalNestingLevel > 0) {
      buf.append(StringUtil.repeat("[/quote]","[/q]", globalNestingLevel));
    }
    return buf.toString();
  }

}
cyberpunk
() автор топика

Ты кипучий, неисправимый лентяй.

OldFatMan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.