/* libhyphenate: A TeX-like hyphenation algorithm. * Copyright (C) 2007 Steve Wolter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * If you have any questions, feel free to contact me: * http://swolter.sdf1.org **/ #ifndef HYPHENATION_TREE_H #define HYPHENATION_TREE_H #include <string> #include <vector> #include <map> #include "HyphenationRule.h" namespace Hyphenate { class HyphenationNode; /** * \class HyphenationTree * \brief The root for a tree of HyphenationNodes. */ class HyphenationTree { private: HyphenationNode* root; int start_safe, end_safe; public: /** The constructor constructs an empty tree, which can be filled * either by reading a whole file of patterns with * <code>loadPatterns</code> or by <code>insert</code>. */ HyphenationTree(); ~HyphenationTree(); /** Read the istream while it is not empty, cutting it into words * and constructing patterns from it. The first lone number * encountered will be the safe start, the second the safe end. */ void loadPatterns(std::istream &source); /** Insert a particular hyphenation pattern into the hyphenation tree. * \param pattern The character pattern to match in the input word. */ void insert (std::auto_ptr<HyphenationRule> pattern); /** Apply all patterns for that hyphenation tree to the supplied * string. Return an array with Hyphenation rules that should be * applied before the addition of the next letter of the string. * The pointers in that vector point into this tree. */ std::auto_ptr<std::vector<const HyphenationRule*> > applyPatterns (const std::string &word) const; /** Like applyPattern, but will only hyphenate up to the letter * end_at. */ std::auto_ptr<std::vector<const HyphenationRule*> > applyPatterns (const std::string &word, size_t end_at) const; }; } #endif