/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.wikilegis.util; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.liferay.portal.kernel.util.HtmlUtil; /** * @author rpdmiranda * */ public class StringUtils { private static final Pattern PATTERN_ARTIGO = Pattern.compile("(^Art\\. [0-9]+[º.]?) +.+", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private static final Pattern PATTERN_ESTRUTURA = Pattern.compile("^((?:capítulo|seção|subseção|título|livro) [0-9a-z]+) +(?:- +)?(.+)", Pattern.CASE_INSENSITIVE); /** * Trunca uma string até o tamanho especificado, adicionando o final "..." * caso tenha sido necessário limitar o tamanho máximo * * @param original * @param length * @return */ public static String truncate(String original, int length) { if (original.length() <= length) return original; return original.substring(0, length - 3) + "..."; } public static String formataArtigo(String texto, boolean primeiraLinhaInline) { // Converte as linhas para páragrafos BufferedReader reader = new BufferedReader(new StringReader(texto)); StringBuilder sb = new StringBuilder(); String linha; int numero = 0; try { while ((linha = reader.readLine()) != null) { Matcher m = PATTERN_ARTIGO.matcher(linha); if (m.matches()) { StringBuilder sbLinha = new StringBuilder(linha); sbLinha.insert(m.end(1), "[/b]"); sbLinha.insert(0, "[b]"); linha = sbLinha.toString(); } if (numero != 0 || !primeiraLinhaInline) sb.append("<p>"); sb.append(HtmlUtil.escape(linha)); if (numero != 0 || !primeiraLinhaInline) sb.append("</p>"); numero++; } } catch (IOException e) { // Não deve acontecer } int pos = 0; while ((pos = sb.indexOf("[b]", pos)) != -1) { sb.replace(pos, pos + 3, "<b>"); pos += 3; } pos = 0; while ((pos = sb.indexOf("[/b]", pos)) != -1) { sb.replace(pos, pos + 4, "</b>"); pos += 4; } return sb.toString(); } /** * Formata a estrutura para exibição * @param texto * @return */ public static String formataEstrutura(String texto) { // Separa em duas linhas Matcher m = PATTERN_ESTRUTURA.matcher(texto); if (m.matches()) { StringBuilder sb = new StringBuilder(); sb.append(m.group(1)); sb.append("\n"); sb.append(m.group(2)); texto = sb.toString(); } texto = HtmlUtil.escape(texto); return texto.replaceAll("\\n", "<br/>"); } }