//----------------------------------------------------------------------------//
// //
// P a t t e r n s C h e c k e r //
// //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr"> //
// Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. //
// This software is released under the GNU General Public License. //
// Goto http://kenai.com/projects/audiveris to report bugs or suggestions. //
//----------------------------------------------------------------------------//
// </editor-fold>
package omr.glyph.pattern;
import omr.glyph.Grades;
import omr.sheet.SystemInfo;
import omr.text.TextPattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Class {@code PatternsChecker} gathers for a given system a series of
* specific patterns to process (verify, recognize, fix, ...) glyphs
* in their sheet environment.
*
* @author Hervé Bitteur
*/
public class PatternsChecker
{
//~ Static fields/initializers ---------------------------------------------
/** Usual logger utility */
private static final Logger logger = LoggerFactory.getLogger(
PatternsChecker.class);
//~ Instance fields --------------------------------------------------------
//
/** Sequence of patterns to run. */
private final GlyphPattern[] patterns;
/** Dedicated system. */
private final SystemInfo system;
//~ Constructors -----------------------------------------------------------
//
//-----------------//
// PatternsChecker //
//-----------------//
/**
* Creates a new PatternsChecker object.
*
* @param system the dedicated system
*/
public PatternsChecker (final SystemInfo system)
{
this.system = system;
patterns = new GlyphPattern[]{
//
new CaesuraPattern(system), new BeamHookPattern(system),
new DotPattern(system),
// Refresh ...
new RefreshPattern(system, false), new DoubleBeamPattern(system),
new FermataDotPattern(system), new FlagPattern(system),
new FortePattern(system), new HiddenSlurPattern(system),
new SplitPattern(system), new LedgerPattern(system),
new AlterPattern(system), new StemPattern(system),
system.getSlurInspector(), new BassPattern(system),
new ClefPattern(system), new TimePattern(system),
// Refresh ...
new RefreshPattern(system, true),
//
new TextPattern(system),
///new TextCheckerPattern(system), // Debug stuff
///new ArticulationPattern(system),
///new SegmentationPattern(system),
new LeftOverPattern(system)
};
}
//~ Methods ----------------------------------------------------------------
//
//-------------//
// runPatterns //
//-------------//
/**
* Run the sequence of pattern on the dedicated system
*
* @return the number of modifications made
*/
public boolean runPatterns ()
{
int totalModifs = 0;
StringBuilder sb = new StringBuilder();
system.inspectGlyphs(Grades.symbolMinGrade, false);
// final Step symbolsStep = Steps.valueOf(Steps.SYMBOLS);
//
// // Continuing, update UI
// SwingUtilities.invokeLater(
// new Runnable()
// {
// @Override
// public void run ()
// {
// symbolsStep.displayUI(system.getSheet());
// }
// });
for (GlyphPattern pattern : patterns) {
logger.debug("Starting {}", pattern);
system.removeInactiveGlyphs();
try {
int modifs = pattern.runPattern();
if (logger.isDebugEnabled()) {
sb.append(" ")
.append(pattern.name)
.append(":")
.append(modifs);
}
totalModifs += modifs;
} catch (Throwable ex) {
logger.warn(
system.getLogPrefix() + " error running pattern "
+ pattern.name,
ex);
}
}
system.inspectGlyphs(Grades.symbolMinGrade, false);
if (totalModifs > 0) {
logger.debug("S#{} Patterns{}", system.getId(), sb);
}
return totalModifs != 0;
}
//~ Inner Classes ----------------------------------------------------------
//
//----------------//
// RefreshPattern //
//----------------//
/**
* Dummy pattern, just to refresh the system glyphs.
*/
private static class RefreshPattern
extends GlyphPattern
{
//~ Instance fields ----------------------------------------------------
private final boolean wide;
//~ Constructors -------------------------------------------------------
public RefreshPattern (SystemInfo system,
boolean wide)
{
super("Refresh", system);
this.wide = wide;
}
//~ Methods ------------------------------------------------------------
@Override
public int runPattern ()
{
system.inspectGlyphs(Grades.symbolMinGrade, wide);
return 0;
}
}
}