/*
* Copyright 2010-2011 Øyvind Berg (elacin@gmail.com)
*
* 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.elacin.pdfextract.style;
import org.elacin.pdfextract.content.StyledText;
import org.elacin.pdfextract.geom.HasPosition;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* Created by IntelliJ IDEA. User: elacin Date: May 19, 2010 Time: 3:46:09 AM To change this
* template use File | Settings | File Templates.
*/
public class TextUtils {
// -------------------------- PUBLIC STATIC METHODS --------------------------
@NotNull
public static Style findDominatingStyle(@NotNull final Collection<? extends HasPosition> contents) {
if (!listContainsStyledText(contents)) {
return Style.NO_STYLE;
}
Map<Style, Integer> letterCountPerStyle = new HashMap<Style, Integer>(10);
for (HasPosition content : contents) {
if (!(content instanceof StyledText)) {
continue;
}
StyledText text = (StyledText) content;
final Style style = text.getStyle();
if (!letterCountPerStyle.containsKey(style)) {
letterCountPerStyle.put(style, 0);
}
final int numChars = text.getText().length();
letterCountPerStyle.put(style, letterCountPerStyle.get(style) + numChars);
}
int highestNumChars = -1;
Style style = null;
for (Map.Entry<Style, Integer> entry : letterCountPerStyle.entrySet()) {
if (entry.getValue() > highestNumChars) {
style = entry.getKey();
highestNumChars = entry.getValue();
}
}
return style;
}
public static boolean listContainsStyledText(@NotNull final Collection<? extends HasPosition> list) {
for (HasPosition content : list) {
if (content instanceof StyledText) {
return true;
}
}
return false;
}
}