/* * Copyright (c) 2018-2020. Developed by Hedgecode. * * 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 org.hedgecode.chess.pgn.format.wrap; import static org.hedgecode.chess.pgn.PGNConstants.*; /** * AbstractWrapper * * @author Dmitry Samoshin aka gotty */ public abstract class AbstractWrapper implements MovesWrapper { protected abstract int length(); @Override public String wrap(String moves) { StringBuilder sb = new StringBuilder(); int startIndex = 0, endIndex = 0; moves = moves.concat(PGN_SPACE); int index = moves.indexOf(PGN_SPACE); while (index >= 0) { if (index - startIndex >= length()) { sb.append( moves.substring(startIndex, endIndex) ).append(PGN_CRLF); startIndex = endIndex + 1; } endIndex = index; index = moves.indexOf(PGN_SPACE, index + 1); } sb.append( moves.substring(startIndex) ).append(PGN_CRLF); return sb.toString(); } }