[
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# IPython Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# dotenv\n.env\n\n# virtualenv\nvenv/\nENV/\n\n# Spyder project settings\n.spyderproject\n\n# Rope project settings\n.ropeproject\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM python:3.6-stretch\n\nMAINTAINER cgebe\n\nRUN apt-get update && \\\n    apt-get install -y cpanminus && \\\n    cpanm --force XML::Parser\n\nCOPY . /etc/rouge\nWORKDIR /etc/rouge\n\nRUN pip install -U git+https://github.com/pltrdy/pyrouge && \\\n    echo | python setup_rouge.py && \\\n    python setup.py install\n\nENV DATA_DIR /etc/rouge/data\nVOLUME [\"/etc/rouge/data\"]\n\nENTRYPOINT [\"/bin/bash\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include files2rouge/settings.json\n"
  },
  {
    "path": "README.md",
    "content": "# Files2ROUGE\n## Motivations\nGiven two files with the same number of lines, `files2rouge` calculates the average ROUGE scores of each sequence (=line). Each sequence may contain multiple sentences. In this case, the end of sentence string must be passed using the `--eos` flag (default: \".\"). Running `files2rouge` with a wrong eos delimiter may lead to incorrect ROUGE-L score.\n\n\nYou may also be interested in a Python implementation (instead of a wrapper): <https://github.com/pltrdy/rouge>.\n\n```bash\n$ files2rouge --help\nusage: files2rouge [-h] [-v] [-a ARGS] [-s SAVETO] [-e EOS] [-m] [-i]\n                   reference summary\n\nCalculating ROUGE score between two files (line-by-line)\n\npositional arguments:\n  reference             Path of references file\n  summary               Path of summary file\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -v, --verbose         Prints ROUGE logs\n  -a ARGS, --args ARGS  ROUGE Arguments\n  -s SAVETO, --saveto SAVETO\n                        File to save scores\n  -e EOS, --eos EOS     End of sentence separator (for multisentence).\n                        Default: \".\"\n  -m, --stemming        DEPRECATED: stemming is now default behavior\n  -nm, --no_stemming    Switch off stemming\n  -i, --ignore_empty\n```\n\n## Getting Started\n**0) Install prerequisites**\n```bash\npip install -U git+https://github.com/pltrdy/pyrouge\n```\n(**NOTE:** running `pip install pyrouge` would not work as the package is out of date on PyPI)\n\n\n**1) Clone the repo, setup the module and ROUGE**\n```bash\ngit clone https://github.com/pltrdy/files2rouge.git     \ncd files2rouge\npython setup_rouge.py\npython setup.py install\n```\n**Do not forget to run `setup_rouge`**    \n\n**2) Run `files2rouge.py`** \n```bash\nfiles2rouge references.txt summaries.txt \n```\n\n**Outputs:**\nWhen `--verbose` is set, the script prints progress and remaining time on `stderr`.  This can be changed using `--verbose` in order to outputs ROUGE execution logs. \n\nDefault output example:\n```\nPreparing documents...\nRunning ROUGE...\n---------------------------------------------\n1 ROUGE-1 Average_R: 0.28242 (95%-conf.int. 0.25721 - 0.30877)\n1 ROUGE-1 Average_P: 0.30157 (95%-conf.int. 0.27114 - 0.33506)\n1 ROUGE-1 Average_F: 0.28196 (95%-conf.int. 0.25704 - 0.30722)\n---------------------------------------------\n1 ROUGE-2 Average_R: 0.10395 (95%-conf.int. 0.08298 - 0.12600)\n1 ROUGE-2 Average_P: 0.11458 (95%-conf.int. 0.08873 - 0.14023)\n1 ROUGE-2 Average_F: 0.10489 (95%-conf.int. 0.08303 - 0.12741)\n---------------------------------------------\n1 ROUGE-L Average_R: 0.25231 (95%-conf.int. 0.22709 - 0.27771)\n1 ROUGE-L Average_P: 0.26830 (95%-conf.int. 0.23834 - 0.29818)\n1 ROUGE-L Average_F: 0.25142 (95%-conf.int. 0.22741 - 0.27533)\n\nElapsed time: 0.458 secondes\n```\n\n## Call `files2rouge` from Python\n```\nimport files2rouge\nfiles2rouge.run(hyp_path, ref_path)\n```\n\n## ROUGE Args\nOne can specify which ROUGE args to use using the flag `--args` (or `-a`).    \nThe default behavior is equivalent to: \n```\nfiles2rouge reference.txt summary.txt -a \"-c 95 -r 1000 -n 2 -a\" # be sure to write args betwen double-quotes\n```\nYou can find more informations about these arguments [here](./files2rouge/RELEASE-1.5.5/README.txt)\n\n## Known issues\n* `ROUGE-1.5.5.pl - XML::Parser dependency error`: see [issue #9](https://github.com/pltrdy/files2rouge/issues/9).\n\n## More informations\n* [ROUGE Original Paper (Lin 2004)](http://www.aclweb.org/anthology/W04-1013)\n* [ROUGE-1.5.5/README.txt](./files2rouge/RELEASE-1.5.5/README.txt)\n* **Use cases:**\n  * [Text Summarization using OpenNMT](./experiments/openNMT.0.md)\n* About `files2rouge.py`: run `files2rouge.py --help`\n"
  },
  {
    "path": "experiments/openNMT.0.md",
    "content": "\n# Motivations\n\n* Replicate results for Text Summarization task on Gigaword (see 'About')\n* Getting started with Text Summarization using `OpenNMT` ([src](https://github.com/OpenNMT/OpenNMT))\n* Getting started with ROUGE scoring using `files2rouge` ([src](https://github.com/pltrdy/files2rouge)) \n\n# About\n * Reference: http://opennmt.net//Models/#english-summarization\n * Dataset: https://github.com/harvardnlp/sent-summary \n * Expected results:\n   * R1: 33.13 \n   * R2: 16.09 \n   * RL: 31.00\n * OpenNMT v0.2.0. (precisely using commit from the 4th of Jan., 2017, 561994adcd147f9f77cc744a041152c3182a9300)\n * file2rouge commit: 5397befa8397017964d21aa61a4e399dedd5c340\n\n# Setup\n\n```shell\ngit clone https://github.com/OpenNMT/OpenNMT.git opennmt\ngit clone --recursive https://github.com/pltrdy/files2rouge.git files2rouge\n```\nDownload data from [here](https://github.com/harvardnlp/sent-summary) and extract (`tar -xzf summary.tar.gz`) to `./data`.\n\n\n**We assume that your file system is like:**\n\n```\n./   \n  opennmt/   \n  data/   \n  file2rouge/   \n```\n\n# Building model\nFollowing the [guide](http://opennmt.net//Guide/)\n```shell\n# First, move to OpenNMT dir\ncd opennmt\n```\n**1) Preprocess**   \n```shell\nth preprocess.lua -train_src ../data/train/train.article.txt -train_tgt ../data/train/train.title.txt -valid_src ../data/train/valid.article.filter.txt -valid_tgt ../data/train/valid.title.filter.txt -save_data ../data/train/textsum\n```\n**2) Train**   \n```shell\nth train.lua -data ./textsum_train/textsum-train.t7  -save_model textsum\n```\nor using GPU:\n```shell\nth train.lua -data ./textsum_train/textsum_model-train.t7  -save_model textsum -gpuid 1\n```\n**3) Generate summary**   \n```shell\nth translate.lua -model textsum_final.t7 -src ../data/Giga/inputs.txt\n```\n**(add `-gpuid 1` if you trained the model using GPU)**     \nThe output will be in `pred.txt`\n\n# ROUGE Scoring using `files2rouge`\n```shell\ncd ../files2rouge\n./files2rouge --ref ../data/Giga/task1_ref0.txt --summ ../opennmt/pred.txt\n```\n\n# Results\n| ROUGE-1 | ROUGE-2 | ROUGE-L |\n|---------|---------|---------|\n|  34.2   |  16.2   |  31.9   |\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/README.txt",
    "content": "A Brief Introduction of the ROUGE Summary Evaluation Package\nby Chin-Yew LIN \nUniveristy of Southern California/Information Sciences Institute\n05/26/2005\n\n<<WHAT'S NEW>>\n\n(1) Correct the resampling routine which ignores the last evaluation\n    item in the evaluation list. Therefore, the average scores reported\n    by ROUGE is only based on the first N-1 evaluation items.\n    Thanks Barry Schiffman at Columbia University to report this bug.\n    This bug only affects ROUGE-1.5.X. For pre-1.5 ROUGE, it only affects\n    the computation of confidence interval (CI) estimation, i.e. CI is only\n    estimated by the first N-1 evaluation items, but it *does not* affect\n    average scores.\n(2) Correct stemming on multi-token BE heads and modifiers.\n    Previously, only single token heads and modifiers were assumed.\n(3) Change read_text and read_text_LCS functions to read exact words or\n    bytes required by users. Previous versions carry out whitespace \n    compression and other string clear up actions before enforce the length\n    limit. \n(4) Add the capability to score summaries in Basic Element (BE)\n    format by using option \"-3\", standing for BE triple. There are 6\n    different modes in BE scoring. We suggest using *\"-3 HMR\"* on BEs\n    extracted from Minipar parse trees based on our correlation analysis\n    of BE-based scoring vs. human judgements on DUC 2002 & 2003 automatic\n    summaries.\n(5) ROUGE now generates three scores (recall, precision and F-measure)\n    for each evaluation. Previously, only one score is generated\n    (recall). Precision and F-measure scores are useful when the target\n    summary length is not enforced. Only recall scores were necessary since \n    DUC guideline dictated the limit on summary length. For comparison to\n    previous DUC results, please use the recall scores. The default alpha\n    weighting for computing F-measure is 0.5. Users can specify a\n    particular alpha weighting that fits their application scenario using\n    option \"-p alpha-weight\". Where *alpha-weight* is a number between 0\n    and 1 inclusively.\n(6) Pre-1.5 version of ROUGE used model average to compute the overall\n    ROUGE scores when there are multiple references. Starting from v1.5+,\n    ROUGE provides an option to use the best matching score among the\n    references as the final score. The model average option is specified\n    using \"-f A\" (for Average) and the best model option is specified\n    using \"-f B\" (for the Best). The \"-f A\" option is better when use\n    ROUGE in summarization evaluations; while \"-f B\" option is better when\n    use ROUGE in machine translation (MT) and definition\n    question-answering (DQA) evaluations since in a typical MT or DQA\n    evaluation scenario matching a single reference translation or\n    definition answer is sufficient. However, it is very likely that\n    multiple different but equally good summaries exist in summarization\n    evaluation.\n(7) ROUGE v1.5+ also provides the option to specify whether model unit\n    level average will be used (macro-average, i.e. treating every model\n    unit equally) or token level average will be used (micro-average,\n    i.e. treating every token equally). In summarization evaluation, we\n    suggest using model unit level average and this is the default setting\n    in ROUGE. To specify other average mode, use \"-t 0\" (default) for\n    model unit level average, \"-t 1\" for token level average and \"-t 2\"\n    for output raw token counts in models, peers, and matches.\n(8) ROUGE now offers the option to use file list as the configuration\n    file. The input format of the summary files are specified using the\n    \"-z INPUT-FORMAT\" option. The INPUT-FORMAT can be SEE, SPL, ISI or\n    SIMPLE. When \"-z\" is specified, ROUGE assumed that the ROUGE\n    evaluation configuration file is a file list with each evaluation\n    instance per line in the following format:\n\npeer_path1 model_path1 model_path2 ... model_pathN\npeer_path2 model_path1 model_path2 ... model_pathN\n...\npeer_pathM model_path1 model_path2 ... model_pathN\n\n  The first file path is the peer summary (system summary) and it\n  follows with a list of model summaries (reference summaries) separated\n  by white spaces (spaces or tabs).\n(9) When stemming is applied, a new WordNet exception database based\n    on WordNet 2.0 is used. The new database is included in the data\n    directory.\n\n<<USAGE>>\n\n(1) Use \"-h\" option to see a list of options.\n    Summary:\nUsage: ROUGE-1.5.4.pl\n         [-a (evaluate all systems)] \n         [-c cf]\n         [-d (print per evaluation scores)] \n         [-e ROUGE_EVAL_HOME] \n         [-h (usage)] \n         [-b n-bytes|-l n-words] \n         [-m (use Porter stemmer)] \n         [-n max-ngram] \n         [-s (remove stopwords)] \n         [-r number-of-samples (for resampling)] \n         [-2 max-gap-length (if < 0 then no gap length limit)] \n         [-3 <H|HM|HMR|HM1|HMR1|HMR2>] \n         [-u (include unigram in skip-bigram) default no)] \n         [-U (same as -u but also compute regular skip-bigram)] \n         [-w weight (weighting factor for WLCS)] \n         [-v (verbose)] \n         [-x (do not calculate ROUGE-L)] \n         [-f A|B (scoring formula)] \n         [-p alpha (0 <= alpha <=1)] \n         [-t 0|1|2 (count by token instead of sentence)] \n         [-z <SEE|SPL|ISI|SIMPLE>] \n         <ROUGE-eval-config-file> [<systemID>]\n\n  ROUGE-eval-config-file: Specify the evaluation setup. Three files come with the ROUGE \n            evaluation package, i.e. ROUGE-test.xml, verify.xml, and verify-spl.xml are \n            good examples.\n\n  systemID: Specify which system in the ROUGE-eval-config-file to perform the evaluation.\n            If '-a' option is used, then all systems are evaluated and users do not need to\n            provide this argument.\n\n  Default:\n    When running ROUGE without supplying any options (except -a), the following defaults are used:\n    (1) ROUGE-L is computed;\n    (2) 95% confidence interval;\n    (3) No stemming;\n    (4) Stopwords are inlcuded in the calculations;\n    (5) ROUGE looks for its data directory first through the ROUGE_EVAL_HOME environment variable. If\n        it is not set, the current directory is used.\n    (6) Use model average scoring formula.\n    (7) Assign equal importance of ROUGE recall and precision in computing ROUGE f-measure, i.e. alpha=0.5.\n    (8) Compute average ROUGE by averaging sentence (unit) ROUGE scores.\n  Options:\n    -2: Compute skip bigram (ROGUE-S) co-occurrence, also specify the maximum gap length between two words (skip-bigram)\n    -u: Compute skip bigram as -2 but include unigram, i.e. treat unigram as \"start-sentence-symbol unigram\"; -2 has to be specified.\n    -3: Compute BE score.\n        H    -> head only scoring (does not applied to Minipar-based BEs).\n        HM   -> head and modifier pair scoring.\n        HMR  -> head, modifier and relation triple scoring.\n        HM1  -> H and HM scoring (same as HM for Minipar-based BEs).\n        HMR1 -> HM and HMR scoring (same as HMR for Minipar-based BEs).\n        HMR2 -> H, HM and HMR scoring (same as HMR for Minipar-based BEs).\n    -a: Evaluate all systems specified in the ROUGE-eval-config-file.\n    -c: Specify CF\\% (0 <= CF <= 100) confidence interval to compute. The default is 95\\% (i.e. CF=95).\n    -d: Print per evaluation average score for each system.\n    -e: Specify ROUGE_EVAL_HOME directory where the ROUGE data files can be found.\n        This will overwrite the ROUGE_EVAL_HOME specified in the environment variable.\n    -f: Select scoring formula: 'A' => model average; 'B' => best model\n    -h: Print usage information.\n    -b: Only use the first n bytes in the system/peer summary for the evaluation.\n    -l: Only use the first n words in the system/peer summary for the evaluation.\n    -m: Stem both model and system summaries using Porter stemmer before computing various statistics.\n    -n: Compute ROUGE-N up to max-ngram length will be computed.\n    -p: Relative importance of recall and precision ROUGE scores. Alpha -> 1 favors precision, Alpha -> 0 favors recall.\n    -s: Remove stopwords in model and system summaries before computing various statistics.\n    -t: Compute average ROUGE by averaging over the whole test corpus instead of sentences (units).\n        0: use sentence as counting unit, 1: use token as couting unit, 2: same as 1 but output raw counts\n        instead of precision, recall, and f-measure scores. 2 is useful when computation of the final,\n        precision, recall, and f-measure scores will be conducted later.\n    -r: Specify the number of sampling point in bootstrap resampling (default is 1000).\n        Smaller number will speed up the evaluation but less reliable confidence interval.\n    -w: Compute ROUGE-W that gives consecutive matches of length L in an LCS a weight of 'L^weight' instead of just 'L' as in LCS.\n        Typically this is set to 1.2 or other number greater than 1.\n    -v: Print debugging information for diagnositic purpose.\n    -x: Do not calculate ROUGE-L.\n    -z: ROUGE-eval-config-file is a list of peer-model pair per line in the specified format (SEE|SPL|ISI|SIMPLE).\n\n(2) Please read RELEASE-NOTE.txt for information about updates from previous versions.\n\n(3) The following files coming with this package in the \"sample-output\"\n    directory are the expected output of the evaluation files in the\n    \"sample-test\" directory.\n    (a) use \"data\" as ROUGE_EVAL_HOME, compute 95% confidence interval,\n\tcompute ROUGE-L (longest common subsequence, default),\n        compute ROUGE-S* (skip bigram) without gap length limit,\n        compute also ROUGE-SU* (skip bigram with unigram),\n        run resampling 1000 times,\n        compute ROUGE-N (N=1 to 4),\n        compute ROUGE-W (weight = 1.2), and\n\tcompute these ROUGE scores for all systems:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a ROUGE-test.xml\n\n    (b) Same as (a) but apply Porter's stemmer on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -m -a ROUGE-test.xml\n\n    (c) Same as (b) but apply also a stopword list on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m-s.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -m -s -a ROUGE-test.xml\n\n    (d) Same as (a) but apply a summary length limit of 10 words:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a ROUGE-test.xml\n\n    (e) Same as (d) but apply Porter's stemmer on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -m -a ROUGE-test.xml\n\n    (f) Same as (e) but apply also a stopword list on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m-s.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -m -s -a ROUGE-test.xml\n\n    (g) Same as (a) but apply a summary lenght limit of 75 bytes:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a ROUGE-test.xml\n\n    (h) Same as (g) but apply Porter's stemmer on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -m -a ROUGE-test.xml\n\n    (i) Same as (h) but apply also a stopword list on the input:\n    ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m-s.out        \n    > ROUGE-1.5.4.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -m -s -a ROUGE-test.xml\n\n  Sample DUC2002 data (1 system and 1 model only per DUC 2002 topic), their BE and\n    ROUGE evaluation configuration file in XML and file list format,\n    and their expected output are also included for your reference.\n\n    (a) Use DUC2002-BE-F.in.26.lst, a BE files list, as ROUGE the\n        configuration file:\n        command> ROUGE-1.5.4.pl -3 HM -z SIMPLE DUC2002-BE-F.in.26.lst 26\n\toutput:  DUC2002-BE-F.in.26.lst.out\n    (b) Use DUC2002-BE-F.in.26.simple.xml as ROUGE XML evaluation configuration file:\n        command> ROUGE-1.5.4.pl -3 HM DUC2002-BE-F.in.26.simple.xml 26\n\toutput:  DUC2002-BE-F.in.26.simple.out\n    (c) Use DUC2002-BE-L.in.26.lst, a BE files list, as ROUGE the\n        configuration file:\n        command> ROUGE-1.5.4.pl -3 HM -z SIMPLE DUC2002-BE-L.in.26.lst 26\n\toutput:  DUC2002-BE-L.in.26.lst.out\n    (d) Use DUC2002-BE-L.in.26.simple.xml as ROUGE XML evaluation configuration file:\n        command> ROUGE-1.5.4.pl -3 HM DUC2002-BE-L.in.26.simple.xml 26\n\toutput:  DUC2002-BE-L.in.26.simple.out\n    (e) Use DUC2002-ROUGE.in.26.spl.lst, a BE files list, as ROUGE the\n        configuration file:\n        command> ROUGE-1.5.4.pl -n 4 -z SPL DUC2002-ROUGE.in.26.spl.lst 26\n\toutput:  DUC2002-ROUGE.in.26.spl.lst.out\n    (f) Use DUC2002-ROUGE.in.26.spl.xml as ROUGE XML evaluation configuration file:\n        command> ROUGE-1.5.4.pl -n 4 DUC2002-ROUGE.in.26.spl.xml 26\n\toutput:  DUC2002-ROUGE.in.26.spl.out\n\n<<INSTALLATION>>\n\n(1) You need to have DB_File installed. If the Perl script complains\n    about database version incompatibility, you can create a new\n    WordNet-2.0.exc.db by running the buildExceptionDB.pl script in\n    the \"data/WordNet-2.0-Exceptions\" subdirectory.\n(2) You also need to install XML::DOM from http://www.cpan.org.\n    Direct link: http://www.cpan.org/modules/by-module/XML/XML-DOM-1.43.tar.gz.\n    You might need install extra Perl modules that are required by\n    XML::DOM.\n(3) Setup an environment variable ROUGE_EVAL_HOME that points to the\n    \"data\" subdirectory. For example, if your \"data\" subdirectory\n    located at \"/usr/local/ROUGE-1.5.4/data\" then you can setup\n    the ROUGE_EVAL_HOME as follows:\n    (a) Using csh or tcsh:\n        $command_prompt>setenv ROUGE_EVAL_HOME /usr/local/ROUGE-1.5.4/data\n    (b) Using bash\n        $command_prompt>ROUGE_EVAL_HOME=/usr/local/ROUGE-1.5.4/data\n\t$command_prompt>export ROUGE_EVAL_HOME\n(4) Run ROUGE-1.5.4.pl without supplying any arguments will give\n    you a description of how to use the ROUGE script.\n(5) Please look into the included ROUGE-test.xml, verify.xml. and\n    verify-spl.xml evaluation configuration files for preparing your\n    own evaluation setup. More detailed description will be provided\n    later. ROUGE-test.xml and verify.xml specify the input from\n    systems and references are in SEE (Summary Evaluation Environment)\n    format (http://www.isi.edu/~cyl/SEE); while verify-spl.xml specify\n    inputs are in sentence per line format.\n\n<<DOCUMENTATION>>\n\n(1) Please look into the \"docs\" directory for more information about\n    ROUGE.\n(2) ROUGE-Note-v1.4.2.pdf explains how ROUGE works. It was published in\n    Proceedings of the Workshop on Text Summarization Branches Out\n    (WAS 2004), Bacelona, Spain, 2004.\n(3) NAACL2003.pdf presents the initial idea of applying n-gram\n    co-occurrence statistics in automatic evaluation of\n    summarization. It was publised in Proceedsings of 2003 Language\n    Technology Conference (HLT-NAACL 2003), Edmonton, Canada, 2003.\n(4) NTCIR2004.pdf discusses the effect of sample size on the\n    reliability of automatic evaluation results using data in the past\n    Document Understanding Conference (DUC) as examples. It was\n    published in Proceedings of the 4th NTCIR Meeting, Tokyo, Japan, 2004.\n(5) ACL2004.pdf shows how ROUGE can be applied on automatic evaluation\n    of machine translation. It was published in Proceedings of the 42nd\n    Annual Meeting of the Association for Computational Linguistics\n    (ACL 2004), Barcelona, Spain, 2004.\n(6) COLING2004.pdf proposes a new meta-evaluation framework, ORANGE, for\n    automatic evaluation of automatic evaluation methods. We showed\n    that ROUGE-S and ROUGE-L were significantly better than BLEU,\n    NIST, WER, and PER automatic MT evalaution methods under the\n    ORANGE framework. It was published in Proceedings of the 20th\n    International Conference on Computational Linguistics (COLING 2004),\n    Geneva, Switzerland, 2004.\n(7) For information about BE, please go to http://www.isi.edu/~cyl/BE.\n\n<<NOTE>>\n\n    Thanks for using the ROUGE evaluation package. If you have any\nquestions or comments, please send them to cyl@isi.edu. I will do my\nbest to answer your questions.\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/RELEASE-NOTE.txt",
    "content": "# Revision Note: 05/26/2005, Chin-Yew LIN\n#              1.5.5\n#              (1) Correct stemming on multi-token BE heads and modifiers.\n#                  Previously, only single token heads and modifiers were assumed.\n#              (2) Correct the resampling routine which ignores the last evaluation\n#                  item in the evaluation list. Therefore, the average scores reported\n#                  by ROUGE is only based on the first N-1 evaluation items.\n#                  Thanks Barry Schiffman at Columbia University to report this bug.\n#                  This bug only affects ROUGE-1.5.X. For pre-1.5 ROUGE, it only affects\n#                  the computation of confidence interval (CI) estimation, i.e. CI is only\n#                  estimated by the first N-1 evaluation items, but it *does not* affect\n#                  average scores.\n#              (3) Change read_text and read_text_LCS functions to read exact words or\n#                  bytes required by users. Previous versions carry out whitespace \n#                  compression and other string clear up actions before enforce the length\n#                  limit. \n#              1.5.4.1\n#              (1) Minor description change about \"-t 0\" option.\n#              1.5.4\n#              (1) Add easy evalution mode for single reference evaluations with -z\n#                  option.\n#              1.5.3\n#              (1) Add option to compute ROUGE score based on SIMPLE BE format. Given\n#                  a set of peer and model summary file in BE format with appropriate\n#                  options, ROUGE will compute matching scores based on BE lexical\n#                  matches.\n#                  There are 6 options:\n#                  1. H    : Head only match. This is similar to unigram match but\n#                            only BE Head is used in matching. BEs generated by\n#                            Minipar-based breaker do not include head-only BEs,\n#                            therefore, the score will always be zero. Use HM or HMR\n#                            optiions instead.\n#                  2. HM   : Head and modifier match. This is similar to bigram or\n#                            skip bigram but it's head-modifier bigram match based on\n#                            parse result. Only BE triples with non-NIL modifier are\n#                            included in the matching.\n#                  3. HMR  : Head, modifier, and relation match. This is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. Only BE triples with non-NIL\n#                            relation are included in the matching.\n#                  4. HM1  : This is combination of H and HM. It is similar to unigram +\n#                            bigram or skip bigram with unigram match but it's \n#                            head-modifier bigram match based on parse result.\n#                            In this case, the modifier field in a BE can be \"NIL\"\n#                  5. HMR1 : This is combination of HM and HMR. It is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. In this case, the relation\n#                            field of the BE can be \"NIL\".\n#                  6. HMR2 : This is combination of H, HM and HMR. It is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. In this case, the modifier and\n#                            relation fields of the BE can both be \"NIL\".\n#              1.5.2\n#              (1) Add option to compute ROUGE score by token using the whole corpus\n#                  as average unit instead of individual sentences. Previous versions of\n#                  ROUGE uses sentence (or unit) boundary to break counting unit and takes\n#                  the average score from the counting unit as the final score.\n#                  Using the whole corpus as one single counting unit can potentially\n#                  improve the reliablity of the final score that treats each token as\n#                  equally important; while the previous approach considers each sentence as\n#                  equally important that ignores the length effect of each individual\n#                  sentences (i.e. long sentences contribute equal weight to the final\n#                  score as short sentences.)\n#                  +v1.2 provide a choice of these two counting modes that users can\n#                  choose the one that fits their scenarios.\n#              1.5.1\n#              (1) Add precision oriented measure and f-measure to deal with different lengths\n#                  in candidates and references. Importance between recall and precision can\n#                  be controled by 'alpha' parameter:\n#                  alpha -> 0: recall is more important\n#                  alpha -> 1: precision is more important\n#                  Following Chapter 7 in C.J. van Rijsbergen's \"Information Retrieval\".\n#                  http://www.dcs.gla.ac.uk/Keith/Chapter.7/Ch.7.html\n#                  F = 1/(alpha * (1/P) + (1 - alpha) * (1/R)) ;;; weighted harmonic mean\n#              1.4.2\n#              (1) Enforce length limit at the time when summary text is read. Previously (before\n#                  and including v1.4.1), length limit was enforced at tokenization time.\n#              1.4.1\n#              (1) Fix potential over counting in ROUGE-L and ROUGE-W\n#                  In previous version (i.e. 1.4 and order), LCS hit is computed\n#                  by summing union hit over all model sentences. Each model sentence\n#                  is compared with all peer sentences and mark the union LCS. The\n#                  length of the union LCS is the hit of that model sentence. The\n#                  final hit is then sum over all model union LCS hits. This potentially\n#                  would over count a peer sentence which already been marked as contributed\n#                  to some other model sentence. Therefore, double counting is resulted.\n#                  This is seen in evalution where ROUGE-L score is higher than ROUGE-1 and\n#                  this is not correct.\n#                  ROUGEeval-1.4.1.pl fixes this by add a clip function to prevent\n#                  double counting.\n#              1.4\n#              (1) Remove internal Jackknifing procedure:\n#                  Now the ROUGE script will use all the references listed in the\n#                  <MODEL></MODEL> section in each <EVAL></EVAL> section and no\n#                  automatic Jackknifing is performed.\n#                  If Jackknifing procedure is required when comparing human and system\n#                  performance, then users have to setup the procedure in the ROUGE\n#                  evaluation configuration script as follows:\n#                  For example, to evaluate system X with 4 references R1, R2, R3, and R4. \n#                  We do the following computation:\n#\n#                  for system:            and for comparable human:\n#                  s1 = X vs. R1, R2, R3    h1 = R4 vs. R1, R2, R3 \n#                  s2 = X vs. R1, R3, R4    h2 = R2 vs. R1, R3, R4\n#                  s3 = X vs. R1, R2, R4    h3 = R3 vs. R1, R2, R4\n#                  s4 = X vs. R2, R3, R4    h4 = R1 vs. R2, R3, R4\n#\n#                  Average system score for X = (s1+s2+s3+s4)/4 and for human = (h1+h2+h3+h4)/4\n#                  Implementation of this in a ROUGE evaluation configuration script is as follows:\n#                  Instead of writing all references in a evaluation section as below:\n#                    <EVAL ID=\"1\">\n#                    ...\n#                    <PEERS>\n#                    <P ID=\"X\">systemX</X>\n#                    <PEERS>\n#                    <MODELS>\n#                    <M ID=\"1\">R1</M>\n#                    <M ID=\"2\">R2</M>\n#                    <M ID=\"3\">R3</M>\n#                    <M ID=\"4\">R4</M>\n#                    <MODELS>\n#                    </EVAL>\n#                  we write the following:\n#                    <EVAL ID=\"1-1\">\n#                    <PEERS>\n#                    <P ID=\"X\">systemX</X>\n#                    <PEERS>\n#                    <MODELS>\n#                    <M ID=\"2\">R2</M>\n#                    <M ID=\"3\">R3</M>\n#                    <M ID=\"4\">R4</M>\n#                    <MODELS>\n#                    </EVAL>\n#                    <EVAL ID=\"1-2\">\n#                    <PEERS>\n#                    <P ID=\"X\">systemX</X>\n#                    <PEERS>\n#                    <MODELS>\n#                    <M ID=\"1\">R1</M>\n#                    <M ID=\"3\">R3</M>\n#                    <M ID=\"4\">R4</M>\n#                    <MODELS>\n#                    </EVAL>\n#                    <EVAL ID=\"1-3\">\n#                    <PEERS>\n#                    <P ID=\"X\">systemX</X>\n#                    <PEERS>\n#                    <MODELS>\n#                    <M ID=\"1\">R1</M>\n#                    <M ID=\"2\">R2</M>\n#                    <M ID=\"4\">R4</M>\n#                    <MODELS>\n#                    </EVAL>\n#                    <EVAL ID=\"1-4\">\n#                    <PEERS>\n#                    <P ID=\"X\">systemX</X>\n#                    <PEERS>\n#                    <MODELS>\n#                    <M ID=\"1\">R1</M>\n#                    <M ID=\"2\">R2</M>\n#                    <M ID=\"3\">R3</M>\n#                    <MODELS>\n#                    </EVAL>\n#                    \n#                  In this case, the system and human numbers are comparable.\n#                  ROUGE as it is implemented for summarization evaluation is a recall-based metric. \n#                  As we increase the number of references, we are increasing the number of \n#                  count units (n-gram or skip-bigram or LCSes) in the target pool (i.e. \n#                  the number ends up in the denominator of any ROUGE formula is larger). \n#                  Therefore, a candidate summary has more chance to hit but it also has to \n#                  hit more. In the end, this means lower absolute ROUGE scores when more \n#                  references are used and using different sets of rerferences should  not \n#                  be compared to each other. There is no nomalization mechanism in ROUGE \n#                  to properly adjust difference due to different number of references used.\n#                    \n#                  In the ROUGE implementations before v1.4 when there are N models provided for \n#                  evaluating system X in the ROUGE evaluation script, ROUGE does the \n#                  following:\n#                    (1) s1 = X vs. R2, R3, R4, ..., RN\n#                    (2) s2 = X vs. R1, R3, R4, ..., RN\n#                    (3) s3 = X vs. R1, R2, R4, ..., RN\n#                    (4) s4 = X vs. R1, R2, R3, ..., RN\n#                    (5) ...\n#                    (6) sN= X vs. R1, R2, R3, ..., RN-1\n#                  And the final ROUGE score is computed by taking average of (s1, s2, s3, \n#                  s4, ..., sN). When we provide only three references for evaluation of a \n#                  human summarizer, ROUGE does the same thing but using 2 out 3 \n#                  references, get three numbers, and then take the average as the final \n#                  score. Now ROUGE (after v1.4) will use all references without this\n#                  internal Jackknifing procedure. The speed of the evaluation should improve\n#                  a lot, since only one set instead of four sets of computation will be\n#                  conducted.\n#              1.3\n#              (1) Add skip bigram\n#              (2) Add an option to specify the number of sampling point (default is 1000)\n#              1.2.3\n#              (1) Correct the enviroment variable option: -e. Now users can specify evironment\n#                  variable ROUGE_EVAL_HOME using the \"-e\" option; previously this option is\n#                  not active. Thanks Zhouyan Li of Concordia University, Canada pointing this\n#                  out.\n#              1.2.2\n#              (1) Correct confidence interval calculation for median, maximum, and minimum.\n#                  Line 390.\n#              1.2.1\n#              (1) Add sentence per line format input format. See files in Verify-SPL for examples.\n#              (2) Streamline command line arguments.\n#              (3) Use bootstrap resampling to estimate confidence intervals instead of using t-test\n#                  or z-test which assume a normal distribution.\n#              (4) Add LCS (longest common subsequence) evaluation method.\n#              (5) Add WLCS (weighted longest common subsequence) evaluation method.\n#              (6) Add length cutoff in bytes.\n#              (7) Add an option to specify the longest ngram to compute. The default is 4.\n#              1.2\n#              (1) Change zero condition check in subroutine &computeNGramScores when\n#                  computing $gram1Score from\n#                  if($totalGram2Count!=0)  to\n#                  if($totalGram1Count!=0)\n#                  Thanks Ken Litkowski for this bug report.\n#                  This original script will set gram1Score to zero if there is no\n#                  bigram matches. This should rarely has significant affect the final score\n#                  since (a) there are bigram matches most of time; (b) the computation\n#                  of gram1Score is using Jackknifing procedure. However, this definitely\n#                  did not compute the correct $gram1Score when there is no bigram matches.\n#                  Therefore, users of version 1.1 should definitely upgrade to newer\n#                  version of the script that does not contain this bug.\n# Note:        To use this script, two additional data files are needed:\n#              (1) smart_common_words.txt - contains stopword list from SMART IR engine\n#              (2) WordNet-1.6.exc.db - WordNet 1.6 exception inflexion database\n#              These two files have to be put in a directory pointed by the environment\n#              variable: \"ROUGE_EVAL_HOME\".\n#              If environment variable ROUGE_EVAL_HOME does not exist, this script will\n#              will assume it can find these two database files in the current directory.\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/ROUGE-1.5.5.pl",
    "content": "#!/usr/bin/perl -w\n# Add current dir to include\nuse File::Basename;\nuse lib dirname (__FILE__);\n\n# Version:     ROUGE v1.5.5\n# Date:        05/26/2005,05/19/2005,04/26/2005,04/03/2005,10/28/2004,10/25/2004,10/21/2004\n# Author:      Chin-Yew Lin\n# Description: Given an evaluation description file, for example: test.xml,\n#              this script computes the averages of the average ROUGE scores for \n#              the evaluation pairs listed in the ROUGE evaluation configuration file.\n#              For more information, please see:\n#              http://www.isi.edu/~cyl/ROUGE\n#              For more information about Basic Elements, please see:\n#              http://www.isi.edu/~cyl/BE\n# Revision Note:\n#              1.5.5\n#              (1) Correct stemming on multi-token BE heads and modifiers.\n#                  Previously, only single token heads and modifiers were assumed.\n#              (2) Correct the resampling routine which ignores the last evaluation\n#                  item in the evaluation list. Therefore, the average scores reported\n#                  by ROUGE is only based on the first N-1 evaluation items.\n#                  Thanks Barry Schiffman at Columbia University to report this bug.\n#                  This bug only affects ROUGE-1.5.X. For pre-1.5 ROUGE, it only affects\n#                  the computation of confidence interval (CI) estimation, i.e. CI is only\n#                  estimated by the first N-1 evaluation items, but it *does not* affect\n#                  average scores.\n#              (3) Change read_text and read_text_LCS functions to read exact words or\n#                  bytes required by users. Previous versions carry out whitespace \n#                  compression and other string clear up actions before enforce the length\n#                  limit. \n#              1.5.4.1\n#              (1) Minor description change about \"-t 0\" option.\n#              1.5.4\n#              (1) Add easy evalution mode for single reference evaluations with -z\n#                  option.\n#              1.5.3\n#              (1) Add option to compute ROUGE score based on SIMPLE BE format. Given\n#                  a set of peer and model summary file in BE format with appropriate\n#                  options, ROUGE will compute matching scores based on BE lexical\n#                  matches.\n#                  There are 6 options:\n#                  1. H    : Head only match. This is similar to unigram match but\n#                            only BE Head is used in matching. BEs generated by\n#                            Minipar-based breaker do not include head-only BEs,\n#                            therefore, the score will always be zero. Use HM or HMR\n#                            optiions instead.\n#                  2. HM   : Head and modifier match. This is similar to bigram or\n#                            skip bigram but it's head-modifier bigram match based on\n#                            parse result. Only BE triples with non-NIL modifier are\n#                            included in the matching.\n#                  3. HMR  : Head, modifier, and relation match. This is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. Only BE triples with non-NIL\n#                            relation are included in the matching.\n#                  4. HM1  : This is combination of H and HM. It is similar to unigram +\n#                            bigram or skip bigram with unigram match but it's \n#                            head-modifier bigram match based on parse result.\n#                            In this case, the modifier field in a BE can be \"NIL\"\n#                  5. HMR1 : This is combination of HM and HMR. It is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. In this case, the relation\n#                            field of the BE can be \"NIL\".\n#                  6. HMR2 : This is combination of H, HM and HMR. It is similar to\n#                            trigram match but it's head-modifier-relation trigram\n#                            match based on parse result. In this case, the modifier and\n#                            relation fields of the BE can both be \"NIL\".\n#              1.5.2\n#              (1) Add option to compute ROUGE score by token using the whole corpus\n#                  as average unit instead of individual sentences. Previous versions of\n#                  ROUGE uses sentence (or unit) boundary to break counting unit and takes\n#                  the average score from the counting unit as the final score.\n#                  Using the whole corpus as one single counting unit can potentially\n#                  improve the reliablity of the final score that treats each token as\n#                  equally important; while the previous approach considers each sentence as\n#                  equally important that ignores the length effect of each individual\n#                  sentences (i.e. long sentences contribute equal weight to the final\n#                  score as short sentences.)\n#                  +v1.2 provide a choice of these two counting modes that users can\n#                  choose the one that fits their scenarios.\n#              1.5.1\n#              (1) Add precision oriented measure and f-measure to deal with different lengths\n#                  in candidates and references. Importance between recall and precision can\n#                  be controled by 'alpha' parameter:\n#                  alpha -> 0: recall is more important\n#                  alpha -> 1: precision is more important\n#                  Following Chapter 7 in C.J. van Rijsbergen's \"Information Retrieval\".\n#                  http://www.dcs.gla.ac.uk/Keith/Chapter.7/Ch.7.html\n#                  F = 1/(alpha * (1/P) + (1 - alpha) * (1/R)) ;;; weighted harmonic mean\n#              1.4.2\n#              (1) Enforce length limit at the time when summary text is read. Previously (before\n#                  and including v1.4.1), length limit was enforced at tokenization time.\n#              1.4.1\n#              (1) Fix potential over counting in ROUGE-L and ROUGE-W\n#                  In previous version (i.e. 1.4 and order), LCS hit is computed\n#                  by summing union hit over all model sentences. Each model sentence\n#                  is compared with all peer sentences and mark the union LCS. The\n#                  length of the union LCS is the hit of that model sentence. The\n#                  final hit is then sum over all model union LCS hits. This potentially\n#                  would over count a peer sentence which already been marked as contributed\n#                  to some other model sentence. Therefore, double counting is resulted.\n#                  This is seen in evalution where ROUGE-L score is higher than ROUGE-1 and\n#                  this is not correct.\n#                  ROUGEeval-1.4.1.pl fixes this by add a clip function to prevent\n#                  double counting.\n#              1.4\n#              (1) Remove internal Jackknifing procedure:\n#                  Now the ROUGE script will use all the references listed in the\n#                  <MODEL></MODEL> section in each <EVAL></EVAL> section and no\n#                  automatic Jackknifing is performed. Please see RELEASE-NOTE.txt\n#                  for more details.\n#              1.3\n#              (1) Add skip bigram\n#              (2) Add an option to specify the number of sampling point (default is 1000)\n#              1.2.3\n#              (1) Correct the enviroment variable option: -e. Now users can specify evironment\n#                  variable ROUGE_EVAL_HOME using the \"-e\" option; previously this option is\n#                  not active. Thanks Zhouyan Li of Concordia University, Canada pointing this\n#                  out.\n#              1.2.2\n#              (1) Correct confidence interval calculation for median, maximum, and minimum.\n#                  Line 390.\n#              1.2.1\n#              (1) Add sentence per line format input format. See files in Verify-SPL for examples.\n#              (2) Streamline command line arguments.\n#              (3) Use bootstrap resampling to estimate confidence intervals instead of using t-test\n#                  or z-test which assume a normal distribution.\n#              (4) Add LCS (longest common subsequence) evaluation method.\n#              (5) Add WLCS (weighted longest common subsequence) evaluation method.\n#              (6) Add length cutoff in bytes.\n#              (7) Add an option to specify the longest ngram to compute. The default is 4.\n#              1.2\n#              (1) Change zero condition check in subroutine &computeNGramScores when\n#                  computing $gram1Score from\n#                  if($totalGram2Count!=0)  to\n#                  if($totalGram1Count!=0)\n#                  Thanks Ken Litkowski for this bug report.\n#                  This original script will set gram1Score to zero if there is no\n#                  bigram matches. This should rarely has significant affect the final score\n#                  since (a) there are bigram matches most of time; (b) the computation\n#                  of gram1Score is using Jackknifing procedure. However, this definitely\n#                  did not compute the correct $gram1Score when there is no bigram matches.\n#                  Therefore, users of version 1.1 should definitely upgrade to newer\n#                  version of the script that does not contain this bug.\n# Note:        To use this script, two additional data files are needed:\n#              (1) smart_common_words.txt - contains stopword list from SMART IR engine\n#              (2) WordNet-2.0.exc.db - WordNet 2.0 exception inflexion database\n#              These two files have to be put in a directory pointed by the environment\n#              variable: \"ROUGE_EVAL_HOME\".\n#              If environment variable ROUGE_EVAL_HOME does not exist, this script will\n#              will assume it can find these two database files in the current directory.\n# COPYRIGHT (C) UNIVERSITY OF SOUTHERN CALIFORNIA, 2002,2003,2004\n# University of Southern California                                           \n# Information Sciences Institute                                              \n# 4676 Admiralty Way                                                          \n# Marina Del Rey, California 90292-6695                                       \n#                                                                             \n# This software was partially developed under SPAWAR Grant No.\n# N66001-00-1-8916 , and  the Government holds license rights under\n# DAR 7-104.9(a)(c)(1).  It is  \n# transmitted outside of the University of Southern California only under \n# written license agreements or software exchange agreements, and its use   \n# is limited by these agreements.  At no time shall any recipient use       \n# this software in any manner which conflicts or interferes with the        \n# governmental license rights or other provisions of the governing           \n# agreement under which it is obtained.  It is supplied \"AS IS,\" without     \n# any warranties of any kind.  It is furnished only on the basis that any    \n# party who receives it indemnifies and holds harmless the parties who       \n# furnish and originate it against any claims, demands or liabilities        \n# connected with using it, furnishing it to others or providing it to a      \n# third party.  THIS NOTICE MUST NOT BE REMOVED FROM THE SOFTWARE,\n# AND IN THE EVENT THAT THE SOFTWARE IS DIVIDED, IT SHOULD BE\n# ATTACHED TO EVERY PART.\n#\n# Contributor to its design is Chin-Yew Lin.\n\nuse XML::DOM;\nuse DB_File;\nuse Getopt::Std;\n#-------------------------------------------------------------------------------------\nuse vars qw($opt_a $opt_b $opt_c $opt_d $opt_e $opt_f $opt_h $opt_H $opt_m $opt_n $opt_p $opt_s $opt_t $opt_l $opt_v $opt_w $opt_2 $opt_u $opt_x $opt_U $opt_3 $opt_M $opt_z);\nmy $usageFull=\"$0\\n         [-a (evaluate all systems)] \n         [-c cf]\n         [-d (print per evaluation scores)] \n         [-e ROUGE_EVAL_HOME] \n         [-h (usage)] \n         [-H (detailed usage)] \n         [-b n-bytes|-l n-words] \n         [-m (use Porter stemmer)] \n         [-n max-ngram] \n         [-s (remove stopwords)] \n         [-r number-of-samples (for resampling)] \n         [-2 max-gap-length (if < 0 then no gap length limit)] \n         [-3 <H|HM|HMR|HM1|HMR1|HMR2> (for scoring based on BE)] \n         [-u (include unigram in skip-bigram) default no)] \n         [-U (same as -u but also compute regular skip-bigram)] \n         [-w weight (weighting factor for WLCS)] \n         [-v (verbose)] \n         [-x (do not calculate ROUGE-L)] \n         [-f A|B (scoring formula)] \n         [-p alpha (0 <= alpha <=1)] \n         [-t 0|1|2 (count by token instead of sentence)] \n         [-z <SEE|SPL|ISI|SIMPLE>] \n         <ROUGE-eval-config-file> [<systemID>]\\n\n\".\n  \"ROUGE-eval-config-file: Specify the evaluation setup. Three files come with the ROUGE evaluation package, i.e.\\n\".\n  \"          ROUGE-test.xml, verify.xml, and verify-spl.xml are good examples.\\n\".\n  \"systemID: Specify which system in the ROUGE-eval-config-file to perform the evaluation.\\n\".\n  \"          If '-a' option is used, then all systems are evaluated and users do not need to\\n\".\n  \"          provide this argument.\\n\".\n  \"Default:\\n\".\n  \"  When running ROUGE without supplying any options (except -a), the following defaults are used:\\n\".\n  \"  (1) ROUGE-L is computed;\\n\".\n  \"  (2) 95% confidence interval;\\n\".\n  \"  (3) No stemming;\\n\".\n  \"  (4) Stopwords are inlcuded in the calculations;\\n\".\n  \"  (5) ROUGE looks for its data directory first through the ROUGE_EVAL_HOME environment variable. If\\n\".\n  \"      it is not set, the current directory is used.\\n\".\n  \"  (6) Use model average scoring formula.\\n\".\n  \"  (7) Assign equal importance of ROUGE recall and precision in computing ROUGE f-measure, i.e. alpha=0.5.\\n\".\n  \"  (8) Compute average ROUGE by averaging sentence (unit) ROUGE scores.\\n\".\n  \"Options:\\n\".\n  \"  -2: Compute skip bigram (ROGUE-S) co-occurrence, also specify the maximum gap length between two words (skip-bigram)\\n\".\n  \"  -u: Compute skip bigram as -2 but include unigram, i.e. treat unigram as \\\"start-sentence-symbol unigram\\\"; -2 has to be specified.\\n\".\n  \"  -3: Compute BE score. Currently only SIMPLE BE triple format is supported.\\n\".\n  \"      H    -> head only scoring (does not applied to Minipar-based BEs).\\n\".\n  \"      HM   -> head and modifier pair scoring.\\n\".\n  \"      HMR  -> head, modifier and relation triple scoring.\\n\".\n  \"      HM1  -> H and HM scoring (same as HM for Minipar-based BEs).\\n\".\n  \"      HMR1 -> HM and HMR scoring (same as HMR for Minipar-based BEs).\\n\".\n  \"      HMR2 -> H, HM and HMR scoring (same as HMR for Minipar-based BEs).\\n\".\n  \"  -a: Evaluate all systems specified in the ROUGE-eval-config-file.\\n\".\n  \"  -c: Specify CF\\% (0 <= CF <= 100) confidence interval to compute. The default is 95\\% (i.e. CF=95).\\n\".\n  \"  -d: Print per evaluation average score for each system.\\n\".\n  \"  -e: Specify ROUGE_EVAL_HOME directory where the ROUGE data files can be found.\\n\".\n  \"      This will overwrite the ROUGE_EVAL_HOME specified in the environment variable.\\n\".\n  \"  -f: Select scoring formula: 'A' => model average; 'B' => best model\\n\".\n  \"  -h: Print usage information.\\n\".\n  \"  -H: Print detailed usage information.\\n\".\n  \"  -b: Only use the first n bytes in the system/peer summary for the evaluation.\\n\".\n  \"  -l: Only use the first n words in the system/peer summary for the evaluation.\\n\".\n  \"  -m: Stem both model and system summaries using Porter stemmer before computing various statistics.\\n\".\n  \"  -n: Compute ROUGE-N up to max-ngram length will be computed.\\n\".\n  \"  -p: Relative importance of recall and precision ROUGE scores. Alpha -> 1 favors precision, Alpha -> 0 favors recall.\\n\".\n  \"  -s: Remove stopwords in model and system summaries before computing various statistics.\\n\".\n  \"  -t: Compute average ROUGE by averaging over the whole test corpus instead of sentences (units).\\n\".\n  \"      0: use sentence as counting unit, 1: use token as couting unit, 2: same as 1 but output raw counts\\n\".\n  \"      instead of precision, recall, and f-measure scores. 2 is useful when computation of the final,\\n\".\n  \"      precision, recall, and f-measure scores will be conducted later.\\n\".\n  \"  -r: Specify the number of sampling point in bootstrap resampling (default is 1000).\\n\".\n  \"      Smaller number will speed up the evaluation but less reliable confidence interval.\\n\".\n  \"  -w: Compute ROUGE-W that gives consecutive matches of length L in an LCS a weight of 'L^weight' instead of just 'L' as in LCS.\\n\".\n  \"      Typically this is set to 1.2 or other number greater than 1.\\n\".\n  \"  -v: Print debugging information for diagnositic purpose.\\n\".\n  \"  -x: Do not calculate ROUGE-L.\\n\".\n  \"  -z: ROUGE-eval-config-file is a list of peer-model pair per line in the specified format (SEE|SPL|ISI|SIMPLE).\\n\";\n\nmy $usage=\"$0\\n         [-a (evaluate all systems)] \n         [-c cf]\n         [-d (print per evaluation scores)] \n         [-e ROUGE_EVAL_HOME] \n         [-h (usage)] \n         [-H (detailed usage)] \n         [-b n-bytes|-l n-words] \n         [-m (use Porter stemmer)] \n         [-n max-ngram] \n         [-s (remove stopwords)] \n         [-r number-of-samples (for resampling)] \n         [-2 max-gap-length (if < 0 then no gap length limit)] \n         [-3 <H|HM|HMR|HM1|HMR1|HMR2> (for scoring based on BE)] \n         [-u (include unigram in skip-bigram) default no)] \n         [-U (same as -u but also compute regular skip-bigram)] \n         [-w weight (weighting factor for WLCS)] \n         [-v (verbose)] \n         [-x (do not calculate ROUGE-L)] \n         [-f A|B (scoring formula)] \n         [-p alpha (0 <= alpha <=1)] \n         [-t 0|1|2 (count by token instead of sentence)] \n         [-z <SEE|SPL|ISI|SIMPLE>] \n         <ROUGE-eval-config-file> [<systemID>]\n\";\ngetopts('ahHb:c:de:f:l:mMn:p:st:r:2:3:w:uUvxz:');\nmy $systemID;\n\ndie $usageFull if defined($opt_H);\ndie $usage if defined($opt_h)||@ARGV==0;\ndie \"Please specify the ROUGE configuration file or use option '-h' for help\\n\" if(@ARGV==0);\nif(@ARGV==1&&defined($opt_z)) {\n  $systemID=\"X\"; # default system ID\n}\nelsif(@ARGV==1&&!defined($opt_a)) {\n  die \"Please specify a system ID to evaluate or use option '-a' to evaluate all systems. For more information, use option '-h'.\\n\";\n}\nelsif(@ARGV==2) {\n  $systemID=$ARGV[1];\n}\nif(defined($opt_e)) {\n  $stopwords=\"$opt_e/smart_common_words.txt\";\n  $wordnetDB=\"$opt_e/WordNet-2.0.exc.db\";\n}\nelse {\n  if(exists($ENV{\"ROUGE_EVAL_HOME\"})) {\n    $stopwords=\"$ENV{\\\"ROUGE_EVAL_HOME\\\"}/smart_common_words.txt\";\n    $wordnetDB=\"$ENV{\\\"ROUGE_EVAL_HOME\\\"}/WordNet-2.0.exc.db\";\n  }\n  elsif(exists($ENV{\"RED_EVAL_HOME\"})) {\n    $stopwords=\"$ENV{\\\"RED_EVAL_HOME\\\"}/smart_common_words.txt\";\n    $wordnetDB=\"$ENV{\\\"RED_EVAL_HOME\\\"}/WordNet-2.0.exc.db\";\n  }\n  else {\n    # if no environment variable exists then assume data files are in the current directory\n    $stopwords=\"smart_common_words.txt\";\n    $wordnetDB=\"WordNet-2.0.exc.db\";\n  }\n}\n\nif(defined($opt_s)) {\n  $useStopwords=0; # do not use stop words\n}\nelse {\n  $useStopwords=1; # use stop words\n}\n\nif(defined($opt_l)&&defined($opt_b)) {\n  die \"Please specify length limit in words or bytes but not both.\\n\";\n}\n\nif(defined($opt_l)) {\n  $lengthLimit=$opt_l;\n  $byteLimit=0;   # no byte limit\n}\nelsif(defined($opt_b)) {\n  $lengthLimit=0; # no length limit in words\n  $byteLimit=$opt_b;\n}\nelse {\n  $byteLimit=0;   # no byte limit\n  $lengthLimit=0; # no length limit\n}\n\nunless(defined($opt_c)) {\n  $opt_c=95;\n}\nelse {\n  if($opt_c<0||$opt_c>100) {\n    die \"Confidence interval should be within 0 and 100. Use option -h for more details.\\n\";\n  }\n}\n\nif(defined($opt_w)) {\n  if($opt_w>0) {\n    $weightFactor=$opt_w;\n  }\n  else {\n    die \"ROUGE-W weight factor must greater than 0.\\n\";\n  }\n}\n#unless(defined($opt_n)) {\n#    $opt_n=4; # default maximum ngram is 4\n#}\nif(defined($opt_v)) {\n  $debug=1;\n}\nelse {\n  $debug=0;\n}\n\nif(defined($opt_r)) {\n  $numOfResamples=$opt_r;\n}\nelse {\n  $numOfResamples=1000;\n}\n\nif(defined($opt_2)) {\n  $skipDistance=$opt_2;\n}\n\nif(defined($opt_3)) {\n  $BEMode=$opt_3;\n}\n\nif(defined($opt_f)) {\n  $scoreMode=$opt_f;\n}\nelse {\n  $scoreMode=\"A\"; # default: use model average scoring formula\n}\n\nif(defined($opt_p)) {\n  $alpha=$opt_p;\n  if($alpha<0||\n     $alpha>1) {\n    die \"Relative importance of ROUGE recall and precision has to be between 0 and 1 inclusively.\\n\";\n  }\n}\nelse {\n  $alpha=0.5; # default is equal importance of ROUGE recall and precision\n}\n\nif(defined($opt_t)) {\n  # make $opt_t as undef when appropriate option is given\n  # when $opt_t is undef, sentence level average will be used\n  if($opt_t==0) {\n    $opt_t=undef;\n  }\n  elsif($opt_t!=1&&\n\t$opt_t!=2) {\n    $opt_t=undef; # other than 1 or 2, let $opt_t to be undef\n  }\n}\n\nif(defined($opt_z)) {\n  # If opt_z is specified, the user has to specify a system ID that\n  # is used for identification therefore -a option is not allowed.\n  # Here we make it undef.\n  $opt_a=undef;\n}\n#-------------------------------------------------------------------------------------\n# Setup ROUGE scoring parameters\n%ROUGEParam=();   # ROUGE scoring parameter\nif(defined($lengthLimit)) {\n  $ROUGEParam{\"LENGTH\"}=$lengthLimit;\n}\nelse {\n  $ROUGEParam{\"LENGTH\"}=undef;\n}\nif(defined($byteLimit)) {\n  $ROUGEParam{\"BYTE\"}=$byteLimit;\n}\nelse {\n  $ROUGEParam{\"BYTE\"}=undef;\n}\nif(defined($opt_n)) { # ngram size\n  $ROUGEParam{\"NSIZE\"}=$opt_n;\n}\nelse {\n  $ROUGEParam{\"NSIZE\"}=undef;\n}\nif(defined($weightFactor)) {\n  $ROUGEParam{\"WEIGHT\"}=$weightFactor;\n}\nelse {\n  $ROUGEParam{\"WEIGHT\"}=undef;\n}\nif(defined($skipDistance)) {\n  $ROUGEParam{\"SD\"}=$skipDistance;\n}\nelse {\n  $ROUGEParam{\"SD\"}=undef;\n}\nif(defined($scoreMode)) {\n  $ROUGEParam{\"SM\"}=$scoreMode;\n}\nelse {\n  $ROUGEParam{\"SM\"}=undef;\n}\nif(defined($alpha)) {\n  $ROUGEParam{\"ALPHA\"}=$alpha;\n}\nelse {\n  $ROUGEParam{\"ALPHA\"}=undef;\n}\nif(defined($opt_t)) {\n  $ROUGEParam{\"AVERAGE\"}=$opt_t;\n}\nelse {\n  $ROUGEParam{\"AVERAGE\"}=undef;\n}\nif(defined($opt_3)) {\n  $ROUGEParam{\"BEMODE\"}=$opt_3;\n}\nelse {\n  $ROUGEParam{\"BEMODE\"}=undef;\n}\n#-------------------------------------------------------------------------------------\n# load stopwords\n%stopwords=();\nopen(STOP,$stopwords)||die \"Cannot open $stopwords\\n\";\nwhile(defined($line=<STOP>)) {\n  chomp($line);\n  $stopwords{$line}=1;\n}\nclose(STOP);\n# load WordNet database\nif(-e \"$wordnetDB\") {\n  tie %exceptiondb,'DB_File',\"$wordnetDB\",O_RDONLY,0440,$DB_HASH or\n    die \"Cannot open exception db file for reading: $wordnetDB\\n\";\n}\nelse {\n  die \"Cannot open exception db file for reading: $wordnetDB\\n\";\n}\n#-------------------------------------------------------------------------------------\n# Initialize Porter Stemmer\n&initialise();\n#-------------------------------------------------------------------------------------\n# Read and parse the document\nmy $parser = new XML::DOM::Parser;\nmy $doc;\nunless(defined($opt_z)) {\n  $doc=$parser->parsefile($ARGV[0]);\n}\nelse {\n  open($doc,$ARGV[0])||die \"Cannot open $ARGV[0]\\n\";\n}\n%ROUGEEvals=();\n@ROUGEEvalIDs=();\n%ROUGEPeerIDTable=();\n@allPeerIDs=();\n%knownMissing=(); # remember missing submission already known\nif(defined($doc)) {\n  # read evaluation description file\n  &readEvals(\\%ROUGEEvals,\\@ROUGEEvalIDs,\\%ROUGEPeerIDTable,$doc,undef);\n  # print evaluation configuration\n  if(defined($opt_z)) {\n    if(defined($ARGV[1])) {\n      $systemID=$ARGV[1];\n    }\n    else {\n      $systemID=\"X\"; # default system ID in BE file list evaluation mode\n    }\n    push(@allPeerIDs,$systemID);\n  }\n  else {\n    unless(defined($opt_a)) {\n      $systemID=$ARGV[1];\n      push(@allPeerIDs,$systemID);\n    }\n    else {\n      # run evaluation for each peer listed in the description file\n      @allPeerIDs=sort (keys %ROUGEPeerIDTable);\n    }\n  }\n  foreach $peerID (@allPeerIDs) {\n    %testIDs=();\n    #\tprint \"\\@PEER($peerID)--------------------------------------------------\\n\";\n    if(defined($opt_n)) {\n      # evaluate a specific peer\n      # compute ROUGE score up to $opt_n-gram\n      for($n=1;$n<=$opt_n;$n++) {\n\tmy (%ROUGEScores,%ROUGEAverages);\n\t\n\t%ROUGEScores=();\n\tforeach $e (@ROUGEEvalIDs) {\n\t  if($debug) {\n\t    print \"\\@Eval ($e)\\n\";\n\t  }\n\t  $ROUGEParam{\"NSIZE\"}=$n;\n\t  &computeROUGEX(\"N\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n\t}\n\t# compute averages\n\t%ROUGEAverages=();\n\t&computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n\t&printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-$n\",$opt_c,$opt_t,$opt_d);\n      }\n    }\n    unless(defined($opt_x)||defined($opt_3)) {\n      #-----------------------------------------------\n      # compute LCS score\n      %ROUGEScores=();\n      foreach $e (@ROUGEEvalIDs) {\n\t&computeROUGEX(\"L\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n      }\n      # compute averages\n      %ROUGEAverages=();\n      &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n      &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-L\",$opt_c,$opt_t,$opt_d);\n    }\n    if(defined($opt_w)) {\n      #-----------------------------------------------\n      # compute WLCS score\n      %ROUGEScores=();\n      foreach $e (@ROUGEEvalIDs) {\n\t&computeROUGEX(\"W\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n      }\n      # compute averages\n      %ROUGEAverages=();\n      &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n      &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-W-$weightFactor\",$opt_c,$opt_t,$opt_d);\n    }\n    if(defined($opt_2)) {\n      #-----------------------------------------------\n      # compute skip bigram score\n      %ROUGEScores=();\n      foreach $e (@ROUGEEvalIDs) {\n\t&computeROUGEX(\"S\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n      }\n      # compute averages\n      %ROUGEAverages=();\n      &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n      if($skipDistance>=0) {\n\tif(defined($opt_u)) {\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-SU$skipDistance\",$opt_c,$opt_t,$opt_d);\n\t}\n\telsif(defined($opt_U)) {\n\t  # print regular skip bigram results\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-S$skipDistance\",$opt_c,$opt_t,$opt_d);\n\t  #-----------------------------------------------\n\t  # compute skip bigram with unigram extension score\n\t  $opt_u=1;\n\t  %ROUGEScores=();\n\t  foreach $e (@ROUGEEvalIDs) {\n\t    &computeROUGEX(\"S\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n\t  }\n\t  $opt_u=undef;\n\t  # compute averages\n\t  %ROUGEAverages=();\n\t  &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-SU$skipDistance\",$opt_c,$opt_t,$opt_d);\n\t}\n\telse {\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-S$skipDistance\",$opt_c,$opt_t,$opt_d);\n\t}\n      }\n      else {\n\tif(defined($opt_u)) {\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-SU*\",$opt_c,$opt_t,$opt_d);\n\t}\n\telse {\n\t  &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-S*\",$opt_c,$opt_t,$opt_d);\n\t  if(defined($opt_U)) {\n\t    #-----------------------------------------------\n\t    # compute skip bigram with unigram extension score\n\t    $opt_u=1;\n\t    %ROUGEScores=();\n\t    foreach $e (@ROUGEEvalIDs) {\n\t      &computeROUGEX(\"S\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n\t    }\n\t    $opt_u=undef;\n\t    # compute averages\n\t    %ROUGEAverages=();\n\t    &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n\t    &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-SU*\",$opt_c,$opt_t,$opt_d);\n\t  }\n\t}\n      }\n    }\n    if(defined($opt_3)) {\n      #-----------------------------------------------\n      # compute Basic Element triple score\n      %ROUGEScores=();\n      foreach $e (@ROUGEEvalIDs) {\n\t&computeROUGEX(\"BE\",\\%ROUGEScores,$e,$ROUGEEvals{$e},$peerID,\\%ROUGEParam);\n      }\n      # compute averages\n      %ROUGEAverages=();\n      &computeAverages(\\%ROUGEScores,\\%ROUGEAverages,$opt_t);\n      &printResults($peerID,\\%ROUGEAverages,\\%ROUGEScores,\"ROUGE-BE-$BEMode\",$opt_c,$opt_t,$opt_d);\n    }\n  }\n}\nelse {\n  die \"Document undefined\\n\";\n}\nif(defined($opt_z)) {\n  close($doc);\n}\nuntie %exceptiondb;\n\nsub printResults {\n  my $peerID=shift;\n  my $ROUGEAverages=shift;\n  my $ROUGEScores=shift;\n  my $methodTag=shift;\n  my $opt_c=shift;\n  my $opt_t=shift;\n  my $opt_d=shift;\n\n  print \"---------------------------------------------\\n\";\n  if(!defined($opt_t)||$opt_t==1) {\n    print \"$peerID $methodTag Average_R: $ROUGEAverages->{'AvgR'} \";\n    print \"($opt_c\\%-conf.int. $ROUGEAverages->{'CIAvgL_R'} - $ROUGEAverages->{'CIAvgU_R'})\\n\";\n    print \"$peerID $methodTag Average_P: $ROUGEAverages->{'AvgP'} \";\n    print \"($opt_c\\%-conf.int. $ROUGEAverages->{'CIAvgL_P'} - $ROUGEAverages->{'CIAvgU_P'})\\n\";\n    print \"$peerID $methodTag Average_F: $ROUGEAverages->{'AvgF'} \";\n    print \"($opt_c\\%-conf.int. $ROUGEAverages->{'CIAvgL_F'} - $ROUGEAverages->{'CIAvgU_F'})\\n\";\n  }\n  else {\n    print \"$peerID $methodTag M_count: \";\n    print int($ROUGEAverages->{'M_cnt'});\n    print \" P_count: \";\n    print int($ROUGEAverages->{'P_cnt'});\n    print \" H_count: \";\n    print int($ROUGEAverages->{'H_cnt'});\n    print \"\\n\";\n  }\n  if(defined($opt_d)) {\n    print \".............................................\\n\";\n    &printPerEvalData($ROUGEScores,\"$peerID $methodTag Eval\");\n  }\n}\n\nsub bootstrapResampling {\n  my $scores=shift;\n  my $instances=shift;\n  my $seed=shift;\n  my $opt_t=shift;\n  my $sample;\n  my ($i,$ridx);\n  \n  # Use $seed to seed the random number generator to make sure\n  # we have the same random sequence every time, therefore a\n  # consistent estimation of confidence interval in different runs.\n  # This is not necessary. To ensure a consistent result in reporting\n  # results using ROUGE, this is implemented.\n  srand($seed);\n  for($i=0;$i<@{$instances};$i++) {\n    # generate a random index\n    $ridx=int(rand(@{$instances}));\n    unless(defined($sample)) {\n      # setup the resampling array\n      $sample=[];\n      push(@$sample,$scores->{$instances->[$ridx]}[0]);\n      push(@$sample,$scores->{$instances->[$ridx]}[1]);\n      push(@$sample,$scores->{$instances->[$ridx]}[2]);\n    }\n    else {\n      # update the resampling array\n      $sample->[0]+=$scores->{$instances->[$ridx]}[0];\n      $sample->[1]+=$scores->{$instances->[$ridx]}[1];\n      $sample->[2]+=$scores->{$instances->[$ridx]}[2];\n    }\n  }\n  # compute the average result for this resampling procedure\n  unless(defined($opt_t)) {\n    # per instance or sentence average\n    if(@{$instances}>0) {\n      $sample->[0]/=@{$instances};\n      $sample->[1]/=@{$instances};\n      $sample->[2]/=@{$instances};\n    }\n    else {\n      $sample->[0]=0;\n      $sample->[1]=0;\n      $sample->[2]=0;\n    }\n  }\n  else {\n    if($opt_t==1) {\n      # per token or corpus level average\n      # output recall, precision, and f-measure score\n      my ($tmpR,$tmpP,$tmpF);\n      if($sample->[0]>0) {\n\t$tmpR=$sample->[2]/$sample->[0]; # recall\n      }\n      else {\n\t$tmpR=0;\n      }\n      if($sample->[1]>0) {\n\t$tmpP=$sample->[2]/$sample->[1]; # precision\n      }\n      else {\n\t$tmpP=0;\n      }\n      if((1-$alpha)*$tmpP+$alpha*$tmpR>0) {\n\t$tmpF=($tmpR*$tmpP)/((1-$alpha)*$tmpP+$alpha*$tmpR); # f-measure\n      }\n      else {\n\t$tmpF=0;\n      }\n      $sample->[0]=$tmpR;\n      $sample->[1]=$tmpP;\n      $sample->[2]=$tmpF;\n    }\n    else {\n      # $opt_t!=1 => output raw model token count, peer token count, and hit count\n      # do nothing, just return $sample\n    }\n  }\n  return $sample;\n}\n\nsub by_value {\n  $a<=>$b;\n}\n\nsub printPerEvalData {\n  my $ROUGEScores=shift;\n  my $tag=shift; # tag to identify each evaluation\n  my (@instances,$i,$j);\n  \n  @instances=sort by_evalID (keys %$ROUGEScores);\n  foreach $i (@instances) {\n    # print average per evaluation score\n    print \"$tag $i R:$ROUGEScores->{$i}[0] P:$ROUGEScores->{$i}[1] F:$ROUGEScores->{$i}[2]\\n\";\n  }\n}\n\nsub by_evalID {\n  my ($a1,$b1);\n\n  if($a=~/^([0-9]+)/o) {\n    $a1=$1;\n  }\n  if($b=~/^([0-9]+)/o) {\n    $b1=$1;\n  }\n  if(defined($a1)&&defined($b1)) {\n    return $a1<=>$b1;\n  }\n  else {\n    return $a cmp $b;\n  }\n}\n\nsub computeAverages {\n  my $ROUGEScores=shift;\n  my $ROUGEAverages=shift;\n  my $opt_t=shift;\n  my ($avgAvgROUGE_R,$resampleAvgROUGE_R);\n  my ($avgAvgROUGE_P,$resampleAvgROUGE_P);\n  my ($avgAvgROUGE_F,$resampleAvgROUGE_F);\n  my ($ciU,$ciL);\n  my (@instances,$i,$j,@rankedArray_R,@rankedArray_P,@RankedArray_F);\n  \n  @instances=sort (keys %$ROUGEScores);\n  $avgAvgROUGE_R=0;\n  $avgAvgROUGE_P=0;\n  $avgAvgROUGE_F=0;\n  $resampleAvgROUGE_R=0;\n  $resampleAvgROUGE_P=0;\n  $resampleAvgROUGE_F=0;\n  # compute totals\n  foreach $i (@instances) {\n    $avgAvgROUGE_R+=$ROUGEScores->{$i}[0]; # recall     ; or model token count\n    $avgAvgROUGE_P+=$ROUGEScores->{$i}[1]; # precision  ; or peer token count\n    $avgAvgROUGE_F+=$ROUGEScores->{$i}[2]; # f1-measure ; or match token count (hit)\n  }\n  # compute averages\n  unless(defined($opt_t)) {\n    # per sentence average\n    if((scalar @instances)>0) {\n      $avgAvgROUGE_R=sprintf(\"%7.5f\",$avgAvgROUGE_R/(scalar @instances));\n      $avgAvgROUGE_P=sprintf(\"%7.5f\",$avgAvgROUGE_P/(scalar @instances));\n      $avgAvgROUGE_F=sprintf(\"%7.5f\",$avgAvgROUGE_F/(scalar @instances));\n    }\n    else {\n      $avgAvgROUGE_R=sprintf(\"%7.5f\",0);\n      $avgAvgROUGE_P=sprintf(\"%7.5f\",0);\n      $avgAvgROUGE_F=sprintf(\"%7.5f\",0);\n    }\n  }\n  else {\n    if($opt_t==1) {\n      # per token average on corpus level\n      my ($tmpR,$tmpP,$tmpF);\n      if($avgAvgROUGE_R>0) {\n\t$tmpR=$avgAvgROUGE_F/$avgAvgROUGE_R;\n      }\n      else {\n\t$tmpR=0;\n      }\n      if($avgAvgROUGE_P>0) {\n\t$tmpP=$avgAvgROUGE_F/$avgAvgROUGE_P;\n      }\n      else {\n\t$tmpP=0;\n      }\n      if((1-$alpha)*$tmpP+$alpha*$tmpR>0) {\n\t$tmpF=($tmpR+$tmpP)/((1-$alpha)*$tmpP+$alpha*$tmpR);\n      }\n      else {\n\t$tmpF=0;\n      }\n      $avgAvgROUGE_R=sprintf(\"%7.5f\",$tmpR);\n      $avgAvgROUGE_P=sprintf(\"%7.5f\",$tmpP);\n      $avgAvgROUGE_F=sprintf(\"%7.5f\",$tmpF);\n    }\n  }\n  if(!defined($opt_t)||$opt_t==1) {\n    # compute confidence intervals using bootstrap resampling\n    @ResamplingArray=();\n    for($i=0;$i<$numOfResamples;$i++) {\n      my $sample;\n      \n      $sample=&bootstrapResampling($ROUGEScores,\\@instances,$i,$opt_t);\n      # sample contains average sum of the sample\n      if(@ResamplingArray==0) {\n\t# setup the resampling array for Avg\n\tmy $s;\n\t\n\t$s=[];\n\tpush(@$s,$sample->[0]);\n\tpush(@ResamplingArray,$s);\n\t$s=[];\n\tpush(@$s,$sample->[1]);\n\tpush(@ResamplingArray,$s);\n\t$s=[];\n\tpush(@$s,$sample->[2]);\n\tpush(@ResamplingArray,$s);\n      }\n      else {\n\t$rsa=$ResamplingArray[0];\n\tpush(@{$rsa},$sample->[0]);\n\t$rsa=$ResamplingArray[1];\n\tpush(@{$rsa},$sample->[1]);\n\t$rsa=$ResamplingArray[2];\n\tpush(@{$rsa},$sample->[2]);\n      }\n    }\n    # sort resampling results\n    {\n      # recall\n      @rankedArray_R=sort by_value (@{$ResamplingArray[0]});\n      $ResamplingArray[0]=\\@rankedArray_R;\n      for($x=0;$x<=$#rankedArray_R;$x++) {\n\t$resampleAvgROUGE_R+=$rankedArray_R[$x];\n\t#\tprint \"*R ($x): $rankedArray_R[$x]\\n\";\n      }\n      $resampleAvgROUGE_R=sprintf(\"%7.5f\",$resampleAvgROUGE_R/(scalar @rankedArray_R));\n      # precision\n      @rankedArray_P=sort by_value (@{$ResamplingArray[1]});\n      $ResamplingArray[1]=\\@rankedArray_P;\n      for($x=0;$x<=$#rankedArray_P;$x++) {\n\t$resampleAvgROUGE_P+=$rankedArray_P[$x];\n\t#\tprint \"*P ($x): $rankedArray_P[$x]\\n\";\n      }\n      $resampleAvgROUGE_P=sprintf(\"%7.5f\",$resampleAvgROUGE_P/(scalar @rankedArray_P));\n      # f1-measure\n      @rankedArray_F=sort by_value (@{$ResamplingArray[2]});\n      $ResamplingArray[2]=\\@rankedArray_F;\n      for($x=0;$x<=$#rankedArray_F;$x++) {\n\t$resampleAvgROUGE_F+=$rankedArray_F[$x];\n\t#\tprint \"*F ($x): $rankedArray_F[$x]\\n\";\n      }\n      $resampleAvgROUGE_F=sprintf(\"%7.5f\",$resampleAvgROUGE_F/(scalar @rankedArray_F));\n    }\n    #    $ciU=999-int((100-$opt_c)*10/2); # upper bound index\n    #    $ciL=int((100-$opt_c)*10/2);     # lower bound index\n    $delta=$numOfResamples*((100-$opt_c)/2.0)/100.0;\n    $ciUa=int($numOfResamples-$delta-1); # upper confidence interval lower index\n    $ciUb=$ciUa+1;                       # upper confidence interval upper index\n    $ciLa=int($delta);                   # lower confidence interval lower index\n    $ciLb=$ciLa+1;                       # lower confidence interval upper index\n    $ciR=$numOfResamples-$delta-1-$ciUa; # ratio bewteen lower and upper indexes\n    #    $ROUGEAverages->{\"AvgR\"}=$avgAvgROUGE_R;\n    #-------\n    # recall\n    $ROUGEAverages->{\"AvgR\"}=$resampleAvgROUGE_R;\n    # find condifence intervals; take maximum distance from the mean\n    $ROUGEAverages->{\"CIAvgL_R\"}=sprintf(\"%7.5f\",$ResamplingArray[0][$ciLa]+\n\t\t\t\t\t ($ResamplingArray[0][$ciLb]-$ResamplingArray[0][$ciLa])*$ciR);\n    $ROUGEAverages->{\"CIAvgU_R\"}=sprintf(\"%7.5f\",$ResamplingArray[0][$ciUa]+\n\t\t\t\t\t ($ResamplingArray[0][$ciUb]-$ResamplingArray[0][$ciUa])*$ciR);\n    #-------\n    # precision\n    $ROUGEAverages->{\"AvgP\"}=$resampleAvgROUGE_P;\n    # find condifence intervals; take maximum distance from the mean\n    $ROUGEAverages->{\"CIAvgL_P\"}=sprintf(\"%7.5f\",$ResamplingArray[1][$ciLa]+\n\t\t\t\t\t ($ResamplingArray[1][$ciLb]-$ResamplingArray[1][$ciLa])*$ciR);\n    $ROUGEAverages->{\"CIAvgU_P\"}=sprintf(\"%7.5f\",$ResamplingArray[1][$ciUa]+\n\t\t\t\t\t ($ResamplingArray[1][$ciUb]-$ResamplingArray[1][$ciUa])*$ciR);\n    #-------\n    # f1-measure\n    $ROUGEAverages->{\"AvgF\"}=$resampleAvgROUGE_F;\n    # find condifence intervals; take maximum distance from the mean\n    $ROUGEAverages->{\"CIAvgL_F\"}=sprintf(\"%7.5f\",$ResamplingArray[2][$ciLa]+\n\t\t\t\t\t ($ResamplingArray[2][$ciLb]-$ResamplingArray[2][$ciLa])*$ciR);\n    $ROUGEAverages->{\"CIAvgU_F\"}=sprintf(\"%7.5f\",$ResamplingArray[2][$ciUa]+\n\t\t\t\t\t ($ResamplingArray[2][$ciUb]-$ResamplingArray[2][$ciUa])*$ciR);\n    $ROUGEAverages->{\"M_cnt\"}=$avgAvgROUGE_R; # model token count\n    $ROUGEAverages->{\"P_cnt\"}=$avgAvgROUGE_P; # peer token count\n    $ROUGEAverages->{\"H_cnt\"}=$avgAvgROUGE_F; # hit token count\n  }\n  else {\n    # $opt_t==2 => output raw count instead of precision, recall, and f-measure values\n    # in this option, no resampling is necessary, just output the raw counts\n    $ROUGEAverages->{\"M_cnt\"}=$avgAvgROUGE_R; # model token count\n    $ROUGEAverages->{\"P_cnt\"}=$avgAvgROUGE_P; # peer token count\n    $ROUGEAverages->{\"H_cnt\"}=$avgAvgROUGE_F; # hit token count\n  }\n}\n\nsub computeROUGEX {\n  my $metric=shift;       # which ROUGE metric to compute?\n  my $ROUGEScores=shift;\n  my $evalID=shift;\n  my $ROUGEEval=shift;    # one particular evaluation pair\n  my $peerID=shift;       # a specific peer ID\n  my $ROUGEParam=shift;   # ROUGE scoring parameters\n  my $lengthLimit;        # lenght limit in words\n  my $byteLimit;          # length limit in bytes\n  my $NSIZE;              # ngram size for ROUGE-N\n  my $weightFactor;       # weight factor for ROUGE-W\n  my $skipDistance;       # skip distance for ROUGE-S\n  my $scoreMode;          # scoring mode: A = model average; B = best model\n  my $alpha;              # relative importance between recall and precision\n  my $opt_t;              # ROUGE score counting mode\n  my $BEMode;             # Basic Element scoring mode\n  my ($c,$cx,@modelPaths,$modelIDs,$modelRoot,$inputFormat);\n\n  $lengthLimit=$ROUGEParam->{\"LENGTH\"};\n  $byteLimit=$ROUGEParam->{\"BYTE\"};\n  $NSIZE=$ROUGEParam->{\"NSIZE\"};\n  $weightFactor=$ROUGEParam->{\"WEIGHT\"};\n  $skipDistance=$ROUGEParam->{\"SD\"};\n  $scoreMode=$ROUGEParam->{\"SM\"};\n  $alpha=$ROUGEParam->{\"ALPHA\"};\n  $opt_t=$ROUGEParam->{\"AVERAGE\"};\n  $BEMode=$ROUGEParam->{\"BEMODE\"};\n  \n  # Check to see if this evaluation trial contains this $peerID.\n  # Sometimes not every peer provides response for each\n  # evaluation trial.\n  unless(exists($ROUGEEval->{\"Ps\"}{$peerID})) {\n    unless(exists($knownMissing{$evalID})) {\n      $knownMissing{$evalID}={};\n    }\n    unless(exists($knownMissing{$evalID}{$peerID})) {\n      print STDERR \"\\*ROUGE Warning: test instance for peer $peerID does not exist for evaluation $evalID\\n\";\n      $knownMissing{$evalID}{$peerID}=1;\n    }\n    return;\n  }\n  unless(defined($opt_z)) {\n    $peerPath=$ROUGEEval->{\"PR\"}.\"/\".$ROUGEEval->{\"Ps\"}{$peerID};\n  }\n  else {\n    # if opt_z is set then peerPath is read from a file list that\n    # includes the path to the peer.\n    $peerPath=$ROUGEEval->{\"Ps\"}{$peerID};\n  }\n  if(defined($ROUGEEval->{\"MR\"})) {\n    $modelRoot=$ROUGEEval->{\"MR\"};\n  }\n  else {\n    # if opt_z is set then modelPath is read from a file list that\n    # includes the path to the model.\n    $modelRoot=\"\";\n  }\n  $modelIDs=$ROUGEEval->{\"MIDList\"};\n  $inputFormat=$ROUGEEval->{\"IF\"};\n  # construct combined model\n  @modelPaths=(); # reset model paths\n  for($cx=0;$cx<=$#{$modelIDs};$cx++) {\n    my $modelID;\n    $modelID=$modelIDs->[$cx];\n    unless(defined($opt_z)) {\n      $modelPath=\"$modelRoot/$ROUGEEval->{\\\"Ms\\\"}{$modelID}\"; # get full model path\n    }\n    else {\n      # if opt_z is set then modelPath is read from a file list that\n      # includes the full path to the model.\n      $modelPath=\"$ROUGEEval->{\\\"Ms\\\"}{$modelID}\"; # get full model path\n    }\n    if(-e \"$modelPath\") {\n      #\t\t    print \"*$modelPath\\n\";\n    }\n    else {\n      die \"Cannot find model summary: $modelPath\\n\";\n    }\n    push(@modelPaths,$modelPath);\n  }\n  #---------------------------------------------------------------\n  # evaluate peer\n  {\n    my (@results);\n    my ($testID,$avgROUGE,$avgROUGE_P,$avgROUGE_F);\n    @results=();\n    if($metric eq \"N\") {\n      &computeNGramScore(\\@modelPaths,$peerPath,\\@results,$NSIZE,$lengthLimit,$byteLimit,$inputFormat,$scoreMode,$alpha);\n    }\n    elsif($metric eq \"L\") {\n      &computeLCSScore(\\@modelPaths,$peerPath,\\@results,$lengthLimit,$byteLimit,$inputFormat,$scoreMode,$alpha);\n    }\n    elsif($metric eq \"W\") {\n      &computeWLCSScore(\\@modelPaths,$peerPath,\\@results,$lengthLimit,$byteLimit,$inputFormat,$weightFactor,$scoreMode,$alpha);\n    }\n    elsif($metric eq \"S\") {\n      &computeSkipBigramScore(\\@modelPaths,$peerPath,\\@results,$skipDistance,$lengthLimit,$byteLimit,$inputFormat,$scoreMode,$alpha);\n    }\n    elsif($metric eq \"BE\") {\n      &computeBEScore(\\@modelPaths,$peerPath,\\@results,$BEMode,$lengthLimit,$byteLimit,$inputFormat,$scoreMode,$alpha);\n    }\n    else {\n      die \"Unknown ROUGE metric ID: $metric, has to be N, L, W, or S\\n\";\n      \n    }\n    unless(defined($opt_t)) {\n      # sentence level average\n      $avgROUGE=sprintf(\"%7.5f\",$results[2]);\n      $avgROUGE_P=sprintf(\"%7.5f\",$results[4]);\n      $avgROUGE_F=sprintf(\"%7.5f\",$results[5]);\n    }\n    else {\n      # corpus level per token average\n      $avgROUGE=$results[0]; # total model token count\n      $avgROUGE_P=$results[3]; # total peer token count\n      $avgROUGE_F=$results[1]; # total match count between model and peer, i.e. hit\n    }\n    # record ROUGE scores for the current test\n    $testID=\"$evalID\\.$peerID\";\n    if($debug) {\n      print \"$testID\\n\";\n    }\n    unless(exists($testIDs{$testID})) {\n      $testIDs{$testID}=1;\n    }\n    unless(exists($ROUGEScores->{$testID})) {\n      $ROUGEScores->{$testID}=[];\n      push(@{$ROUGEScores->{$testID}},$avgROUGE);   # average ; or model token count\n      push(@{$ROUGEScores->{$testID}},$avgROUGE_P); # average ; or peer token count\n      push(@{$ROUGEScores->{$testID}},$avgROUGE_F); # average ; or match token count (hit)\n    }\n  }\n}\n\n# 10/21/2004 add selection of scoring mode\n# A: average over all models\n# B: take only the best score\nsub computeNGramScore {\n  my $modelPaths=shift;\n  my $peerPath=shift;\n  my $results=shift;\n  my $NSIZE=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my $inputFormat=shift;\n  my $scoreMode=shift;\n  my $alpha=shift;\n  my ($modelPath,$modelText,$peerText,$text,@tokens);\n  my (%model_grams,%peer_grams);\n  my ($gramHit,$gramScore,$gramScoreBest);\n  my ($totalGramHit,$totalGramCount);\n  my ($gramScoreP,$gramScoreF,$totalGramCountP);\n  \n  #------------------------------------------------\n  # read model file and create model n-gram maps\n  $totalGramHit=0;\n  $totalGramCount=0;\n  $gramScoreBest=-1;\n  $gramScoreP=0; # precision\n  $gramScoreF=0; # f-measure\n  $totalGramCountP=0;\n  #------------------------------------------------\n  # read peer file and create model n-gram maps\n  %peer_grams=();\n  $peerText=\"\";\n  &readText($peerPath,\\$peerText,$inputFormat,$lengthLimit,$byteLimit);\n  &createNGram($peerText,\\%peer_grams,$NSIZE);\n  if($debug) {\n    print \"***P $peerPath\\n\";\n    if(defined($peerText)) {\n      print \"$peerText\\n\";\n      print join(\"|\",%peer_grams),\"\\n\";\n    }\n    else {\n      print \"---empty text---\\n\";\n    }\n  }\n  foreach $modelPath (@$modelPaths) {\n    %model_grams=();\n    $modelText=\"\";\n    &readText($modelPath,\\$modelText,$inputFormat,$lengthLimit,$byteLimit);\n    &createNGram($modelText,\\%model_grams,$NSIZE);\n    if($debug) {\n      if(defined($modelText)) {\n\tprint \"$modelText\\n\";\n\tprint join(\"|\",%model_grams),\"\\n\";\n      }\n      else {\n\tprint \"---empty text---\\n\";\n      }\n    }\n    #------------------------------------------------\n    # compute ngram score\n    &ngramScore(\\%model_grams,\\%peer_grams,\\$gramHit,\\$gramScore);\n    # collect hit and count for each models\n    # This will effectively clip hit for each model; therefore would not give extra\n    # credit to reducdant information contained in the peer summary.\n    if($scoreMode eq \"A\") {\n      $totalGramHit+=$gramHit;\n      $totalGramCount+=$model_grams{\"_cn_\"};\n      $totalGramCountP+=$peer_grams{\"_cn_\"};\n    }\n    elsif($scoreMode eq \"B\") {\n      if($gramScore>$gramScoreBest) {\n\t# only take a better score (i.e. better match)\n\t$gramScoreBest=$gramScore;\n\t$totalGramHit=$gramHit;\n\t$totalGramCount=$model_grams{\"_cn_\"};\n\t$totalGramCountP=$peer_grams{\"_cn_\"};\n      }\n    }\n    else {\n      # use average mode\n      $totalGramHit+=$gramHit;\n      $totalGramCount+=$model_grams{\"_cn_\"};\n      $totalGramCountP+=$peer_grams{\"_cn_\"};\n    }\n    if($debug) {\n      print \"***M $modelPath\\n\";\n    }\n  }\n  # prepare score result for return\n  # unigram\n  push(@$results,$totalGramCount); # total number of ngrams in models\n  push(@$results,$totalGramHit);\n  if($totalGramCount!=0) {\n    $gramScore=sprintf(\"%7.5f\",$totalGramHit/$totalGramCount);\n  }\n  else {\n    $gramScore=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScore);\n  push(@$results,$totalGramCountP); # total number of ngrams in peers\n  if($totalGramCountP!=0) {\n    $gramScoreP=sprintf(\"%7.5f\",$totalGramHit/$totalGramCountP);\n  }\n  else {\n    $gramScoreP=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScoreP);      # precision score\n  if((1-$alpha)*$gramScoreP+$alpha*$gramScore>0) {\n    $gramScoreF=sprintf(\"%7.5f\",($gramScoreP*$gramScore)/((1-$alpha)*$gramScoreP+$alpha*$gramScore));\n  }\n  else {\n    $gramScoreF=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScoreF);      # f1-measure score\n  if($debug) {\n    print \"total $NSIZE-gram model count: $totalGramCount\\n\";\n    print \"total $NSIZE-gram peer count: $totalGramCountP\\n\";\n    print \"total $NSIZE-gram hit: $totalGramHit\\n\";\n    print \"total ROUGE-$NSIZE\\-R: $gramScore\\n\";\n    print \"total ROUGE-$NSIZE\\-P: $gramScoreP\\n\";\n    print \"total ROUGE-$NSIZE\\-F: $gramScoreF\\n\";\n  }\n}\n\nsub computeSkipBigramScore {\n  my $modelPaths=shift;\n  my $peerPath=shift;\n  my $results=shift;\n  my $skipDistance=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my $inputFormat=shift;\n  my $scoreMode=shift;\n  my $alpha=shift;\n  my ($modelPath,$modelText,$peerText,$text,@tokens);\n  my (%model_grams,%peer_grams);\n  my ($gramHit,$gramScore,$gramScoreBest);\n  my ($totalGramHitm,$totalGramCount);\n  my ($gramScoreP,$gramScoreF,$totalGramCountP);\n  \n  #------------------------------------------------\n  # read model file and create model n-gram maps\n  $totalGramHit=0;\n  $totalGramCount=0;\n  $gramScoreBest=-1;\n  $gramScoreP=0; # precision\n  $gramScoreF=0; # f-measure\n  $totalGramCountP=0;\n  #------------------------------------------------\n  # read peer file and create model n-gram maps\n  %peer_grams=();\n  $peerText=\"\";\n  &readText($peerPath,\\$peerText,$inputFormat,$lengthLimit,$byteLimit);\n  &createSkipBigram($peerText,\\%peer_grams,$skipDistance);\n  if($debug) {\n    print \"***P $peerPath\\n\";\n    if(defined($peerText)) {\n      print \"$peerText\\n\";\n      print join(\"|\",%peer_grams),\"\\n\";\n    }\n    else {\n      print \"---empty text---\\n\";\n    }\n  }\n  foreach $modelPath (@$modelPaths) {\n    %model_grams=();\n    $modelText=\"\";\n    &readText($modelPath,\\$modelText,$inputFormat,$lengthLimit,$byteLimit);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=1;\n    }\n    &createSkipBigram($modelText,\\%model_grams,$skipDistance);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=undef;\n    }\n    if($debug) {\n      if(defined($modelText)) {\n\tprint \"$modelText\\n\";\n\tprint join(\"|\",%model_grams),\"\\n\";\n      }\n      else {\n\tprint \"---empty text---\\n\";\n      }\n    }\n    #------------------------------------------------\n    # compute ngram score\n    &skipBigramScore(\\%model_grams,\\%peer_grams,\\$gramHit,\\$gramScore);\n    # collect hit and count for each models\n    # This will effectively clip hit for each model; therefore would not give extra\n    # credit to reducdant information contained in the peer summary.\n    if($scoreMode eq \"A\") {\n      $totalGramHit+=$gramHit;\n      $totalGramCount+=$model_grams{\"_cn_\"};\n      $totalGramCountP+=$peer_grams{\"_cn_\"};\n    }\n    elsif($scoreMode eq \"B\") {\n      if($gramScore>$gramScoreBest) {\n\t# only take a better score (i.e. better match)\n\t$gramScoreBest=$gramScore;\n\t$totalGramHit=$gramHit;\n\t$totalGramCount=$model_grams{\"_cn_\"};\n\t$totalGramCountP=$peer_grams{\"_cn_\"};\n      }\n    }\n    else {\n      # use average mode\n      $totalGramHit+=$gramHit;\n      $totalGramCount+=$model_grams{\"_cn_\"};\n      $totalGramCountP+=$peer_grams{\"_cn_\"};\n    }\n    if($debug) {\n      print \"***M $modelPath\\n\";\n    }\n  }\n  # prepare score result for return\n  # unigram\n  push(@$results,$totalGramCount); # total number of ngrams\n  push(@$results,$totalGramHit);\n  if($totalGramCount!=0) {\n    $gramScore=sprintf(\"%7.5f\",$totalGramHit/$totalGramCount);\n  }\n  else {\n    $gramScore=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScore);\n  push(@$results,$totalGramCountP); # total number of ngrams in peers\n  if($totalGramCountP!=0) {\n    $gramScoreP=sprintf(\"%7.5f\",$totalGramHit/$totalGramCountP);\n  }\n  else {\n    $gramScoreP=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScoreP);      # precision score\n  if((1-$alpha)*$gramScoreP+$alpha*$gramScore>0) {\n    $gramScoreF=sprintf(\"%7.5f\",($gramScoreP*$gramScore)/((1-$alpha)*$gramScoreP+$alpha*$gramScore));\n  }\n  else {\n    $gramScoreF=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$gramScoreF);      # f1-measure score\n  if($debug) {\n    print \"total ROUGE-S$skipDistance model count: $totalGramCount\\n\";\n    print \"total ROUGE-S$skipDistance peer count: $totalGramCountP\\n\";\n    print \"total ROUGE-S$skipDistance hit: $totalGramHit\\n\";\n    print \"total ROUGE-S$skipDistance\\-R: $gramScore\\n\";\n    print \"total ROUGE-S$skipDistance\\-P: $gramScore\\n\";\n    print \"total ROUGE-S$skipDistance\\-F: $gramScore\\n\";\n  }\n}\n\nsub computeLCSScore {\n  my $modelPaths=shift;\n  my $peerPath=shift;\n  my $results=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my $inputFormat=shift;\n  my $scoreMode=shift;\n  my $alpha=shift;\n  my ($modelPath,@modelText,@peerText,$text,@tokens);\n  my (@modelTokens,@peerTokens);\n  my ($lcsHit,$lcsScore,$lcsBase,$lcsScoreBest);\n  my ($totalLCSHitm,$totalLCSCount);\n  my (%peer_1grams,%tmp_peer_1grams,%model_1grams,$peerText1,$modelText1);\n  my ($lcsScoreP,$lcsScoreF,$totalLCSCountP);\n  \n  #------------------------------------------------\n  $totalLCSHit=0;\n  $totalLCSCount=0;\n  $lcsScoreBest=-1;\n  $lcsScoreP=0;\n  $lcsScoreF=0;\n  $totalLCSCountP=0;\n  #------------------------------------------------\n  # read peer file and create peer n-gram maps\n  @peerTokens=();\n  @peerText=();\n  &readText_LCS($peerPath,\\@peerText,$inputFormat,$lengthLimit,$byteLimit);\n  &tokenizeText_LCS(\\@peerText,\\@peerTokens);\n  #------------------------------------------------\n  # create unigram for clipping\n  %peer_1grams=();\n  &readText($peerPath,\\$peerText1,$inputFormat,$lengthLimit,$byteLimit);\n  &createNGram($peerText1,\\%peer_1grams,1);\n  if($debug) {\n    my $i;\n    print \"***P $peerPath\\n\";\n    print join(\"\\n\",@peerText),\"\\n\";\n    for($i=0;$i<=$#peerText;$i++) {\n      print $i,\": \",join(\"|\",@{$peerTokens[$i]}),\"\\n\";\n    }\n  }\n  foreach $modelPath (@$modelPaths) {\n    %tmp_peer_1grams=%peer_1grams; # renew peer unigram hash, so the peer count can be reset to the orignal number\n    @modelTokens=();\n    @modelText=();\n    &readText_LCS($modelPath,\\@modelText,$inputFormat,$lengthLimit,$byteLimit);\n    if(defined($opt_M)) {\n      $opt_m=1;\n      &tokenizeText_LCS(\\@modelText,\\@modelTokens);\n      $opt_m=undef;\n    }\n    else {\n      &tokenizeText_LCS(\\@modelText,\\@modelTokens);\n    }\n    #------------------------------------------------\n    # create unigram for clipping\n    %model_1grams=();\n    &readText($modelPath,\\$modelText1,$inputFormat,$lengthLimit,$byteLimit);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=1;\n    }        \n    &createNGram($modelText1,\\%model_1grams,1);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=undef;\n    }\n    #------------------------------------------------\n    # compute LCS score\n    &lcs(\\@modelTokens,\\@peerTokens,\\$lcsHit,\\$lcsScore,\\$lcsBase,\\%model_1grams,\\%tmp_peer_1grams);\n    # collect hit and count for each models\n    # This will effectively clip hit for each model; therefore would not give extra\n    # credit to reductant information contained in the peer summary.\n    # Previous method that lumps model text together and inflates the peer summary\n    # the number of references time would reward redundant information\n    if($scoreMode eq \"A\") {\n      $totalLCSHit+=$lcsHit;\n      $totalLCSCount+=$lcsBase;\n      $totalLCSCountP+=$peer_1grams{\"_cn_\"};\n    }\n    elsif($scoreMode eq \"B\") {\n      if($lcsScore>$lcsScoreBest) {\n\t# only take a better score (i.e. better match)\n\t$lcsScoreBest=$lcsScore;\n\t$totalLCSHit=$lcsHit;\n\t$totalLCSCount=$lcsBase;\n\t$totalLCSCountP=$peer_1grams{\"_cn_\"};\n      }\n    }\n    else {\n      # use average mode\n      $totalLCSHit+=$lcsHit;\n      $totalLCSCount+=$lcsBase;\n      $totalLCSCountP+=$peer_1grams{\"_cn_\"};\n    }\n    if($debug) {\n      my $i;\n      print \"***M $modelPath\\n\";\n      print join(\"\\n\",@modelText),\"\\n\";\n      for($i=0;$i<=$#modelText;$i++) {\n\tprint $i,\": \",join(\"|\",@{$modelTokens[$i]}),\"\\n\";\n      }\n    }\n  }\n  # prepare score result for return\n  push(@$results,$totalLCSCount); # total number of ngrams\n  push(@$results,$totalLCSHit);\n  if($totalLCSCount!=0) {\n    $lcsScore=sprintf(\"%7.5f\",$totalLCSHit/$totalLCSCount);\n  }\n  else {\n    $lcsScore=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScore);\n  push(@$results,$totalLCSCountP); # total number of token in peers\n  if($totalLCSCountP!=0) {\n    $lcsScoreP=sprintf(\"%7.5f\",$totalLCSHit/$totalLCSCountP);\n  }\n  else {\n    $lcsScoreP=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScoreP);\n  if((1-$alpha)*$lcsScoreP+$alpha*$lcsScore>0) {\n    $lcsScoreF=sprintf(\"%7.5f\",($lcsScoreP*$lcsScore)/((1-$alpha)*$lcsScoreP+$alpha*$lcsScore));\n  }\n  else {\n    $lcsScoreF=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScoreF);\n  if($debug) {\n    print \"total ROUGE-L model count: $totalLCSCount\\n\";\n    print \"total ROUGE-L peer count: $totalLCSCountP\\n\";\n    print \"total ROUGE-L hit: $totalLCSHit\\n\";\n    print \"total ROUGE-L-R score: $lcsScore\\n\";\n    print \"total ROUGE-L-P: $lcsScoreP\\n\";\n    print \"total ROUGE-L-F: $lcsScoreF\\n\";\n  }\n}\n\nsub computeWLCSScore {\n  my $modelPaths=shift;\n  my $peerPath=shift;\n  my $results=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my $inputFormat=shift;\n  my $weightFactor=shift;\n  my $scoreMode=shift;\n  my $alpha=shift;\n  my ($modelPath,@modelText,@peerText,$text,@tokens);\n  my (@modelTokens,@peerTokens);\n  my ($lcsHit,$lcsScore,$lcsBase,$lcsScoreBest);\n  my ($totalLCSHitm,$totalLCSCount);\n  my (%peer_1grams,%tmp_peer_1grams,%model_1grams,$peerText1,$modelText1);\n  my ($lcsScoreP,$lcsScoreF,$totalLCSCountP);\n  \n  #------------------------------------------------\n  # read model file and create model n-gram maps\n  $totalLCSHit=0;\n  $totalLCSCount=0;\n  $lcsScoreBest=-1;\n  $lcsScoreP=0;\n  $lcsScoreF=0;\n  $totalLCSCountP=0;\n  #------------------------------------------------\n  # read peer file and create model n-gram maps\n  @peerTokens=();\n  @peerText=();\n  &readText_LCS($peerPath,\\@peerText,$inputFormat,$lengthLimit,$byteLimit);\n  &tokenizeText_LCS(\\@peerText,\\@peerTokens);\n  #------------------------------------------------\n  # create unigram for clipping\n  %peer_1grams=();\n  &readText($peerPath,\\$peerText1,$inputFormat,$lengthLimit,$byteLimit);\n  &createNGram($peerText1,\\%peer_1grams,1);\n  if($debug) {\n    my $i;\n    print \"***P $peerPath\\n\";\n    print join(\"\\n\",@peerText),\"\\n\";\n    for($i=0;$i<=$#peerText;$i++) {\n      print $i,\": \",join(\"|\",@{$peerTokens[$i]}),\"\\n\";\n    }\n  }\n  foreach $modelPath (@$modelPaths) {\n    %tmp_peer_1grams=%peer_1grams; # renew peer unigram hash, so the peer count can be reset to the orignal number\n    @modelTokens=();\n    @modelText=();\n    &readText_LCS($modelPath,\\@modelText,$inputFormat,$lengthLimit,$byteLimit);\n    &tokenizeText_LCS(\\@modelText,\\@modelTokens);\n    #------------------------------------------------\n    # create unigram for clipping\n    %model_1grams=();\n    &readText($modelPath,\\$modelText1,$inputFormat,$lengthLimit,$byteLimit);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=1;\n    }\n    &createNGram($modelText1,\\%model_1grams,1);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=undef;\n    }\n    #------------------------------------------------\n    # compute WLCS score\n    &wlcs(\\@modelTokens,\\@peerTokens,\\$lcsHit,\\$lcsScore,\\$lcsBase,$weightFactor,\\%model_1grams,\\%tmp_peer_1grams);\n    # collect hit and count for each models\n    # This will effectively clip hit for each model; therefore would not give extra\n    # credit to reductant information contained in the peer summary.\n    # Previous method that lumps model text together and inflates the peer summary\n    # the number of references time would reward redundant information\n    if($scoreMode eq \"A\") {\n      $totalLCSHit+=$lcsHit;\n      $totalLCSCount+=&wlcsWeight($lcsBase,$weightFactor);\n      $totalLCSCountP+=&wlcsWeight($peer_1grams{\"_cn_\"},$weightFactor);\n    }\n    elsif($scoreMode eq \"B\") {\n      if($lcsScore>$lcsScoreBest) {\n\t# only take a better score (i.e. better match)\n\t$lcsScoreBest=$lcsScore;\n\t$totalLCSHit=$lcsHit;\n\t$totalLCSCount=&wlcsWeight($lcsBase,$weightFactor);\n\t$totalLCSCountP=&wlcsWeight($peer_1grams{\"_cn_\"},$weightFactor);\n      }\n    }\n    else {\n      # use average mode\n      $totalLCSHit+=$lcsHit;\n      $totalLCSCount+=&wlcsWeight($lcsBase,$weightFactor);\n      $totalLCSCountP+=&wlcsWeight($peer_1grams{\"_cn_\"},$weightFactor);\n    }\n    if($debug) {\n      my $i;\n      print \"***M $modelPath\\n\";\n      print join(\"\\n\",@modelText),\"\\n\";\n      for($i=0;$i<=$#modelText;$i++) {\n\tprint $i,\": \",join(\"|\",@{$modelTokens[$i]}),\"\\n\";\n      }\n    }\n  }\n  # prepare score result for return\n  push(@$results,$totalLCSCount); # total number of ngrams\n  push(@$results,$totalLCSHit);\n  if($totalLCSCount!=0) {\n    $lcsScore=sprintf(\"%7.5f\",&wlcsWeightInverse($totalLCSHit/$totalLCSCount,$weightFactor));\n  }\n  else {\n    $lcsScore=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScore);\n  push(@$results,$totalLCSCountP); # total number of token in peers\n  if($totalLCSCountP!=0) {\n    $lcsScoreP=sprintf(\"%7.5f\",&wlcsWeightInverse($totalLCSHit/$totalLCSCountP,$weightFactor));\n  }\n  else {\n    $lcsScoreP=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScoreP);\n  if((1-$alpha)*$lcsScoreP+$alpha*$lcsScore>0) {\n    $lcsScoreF=sprintf(\"%7.5f\",($lcsScoreP*$lcsScore)/((1-$alpha)*$lcsScoreP+$alpha*$lcsScore));\n  }\n  else {\n    $lcsScoreF=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$lcsScoreF);\n  if($debug) {\n    print \"total ROUGE-W-$weightFactor model count: $totalLCSCount\\n\";\n    print \"total ROUGE-W-$weightFactor peer count: $totalLCSCountP\\n\";\n    print \"total ROUGE-W-$weightFactor hit: $totalLCSHit\\n\";\n    print \"total ROUGE-W-$weightFactor-R score: $lcsScore\\n\";\n    print \"total ROUGE-W-$weightFactor-P score: $lcsScoreP\\n\";\n    print \"total ROUGE-W-$weightFactor-F score: $lcsScoreF\\n\";\n  }\n}\n\nsub computeBEScore {\n  my $modelPaths=shift;\n  my $peerPath=shift;\n  my $results=shift;\n  my $BEMode=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my $inputFormat=shift;\n  my $scoreMode=shift;\n  my $alpha=shift;\n  my ($modelPath,@modelBEList,@peerBEList,$text,@tokens);\n  my (%model_BEs,%peer_BEs);\n  my ($BEHit,$BEScore,$BEScoreBest);\n  my ($totalBEHit,$totalBECount);\n  my ($BEScoreP,$BEScoreF,$totalBECountP);\n  \n  #------------------------------------------------\n  # read model file and create model BE maps\n  $totalBEHit=0;\n  $totalBECount=0;\n  $BEScoreBest=-1;\n  $BEScoreP=0; # precision\n  $BEScoreF=0; # f-measure\n  $totalBECountP=0;\n  #------------------------------------------------\n  # read peer file and create model n-BE maps\n  %peer_BEs=();\n  @peerBEList=();\n  &readBE($peerPath,\\@peerBEList,$inputFormat);\n  &createBE(\\@peerBEList,\\%peer_BEs,$BEMode);\n  if($debug) {\n    print \"***P $peerPath\\n\";\n    if(scalar @peerBEList > 0) {\n#      print join(\"\\n\",@peerBEList);\n#      print \"\\n\";\n      print join(\"#\",%peer_BEs),\"\\n\";\n    }\n    else {\n      print \"---empty text---\\n\";\n    }\n  }\n  foreach $modelPath (@$modelPaths) {\n    %model_BEs=();\n    @modelBEList=();\n    &readBE($modelPath,\\@modelBEList,$inputFormat);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=1;\n    }\n    &createBE(\\@modelBEList,\\%model_BEs,$BEMode);\n    if(defined($opt_M)) { # only apply stemming on models\n      $opt_m=undef;\n    }\n    if($debug) {\n      if(scalar @modelBEList > 0) {\n#\tprint join(\"\\n\",@modelBEList);\n#\tprint \"\\n\";\n\tprint join(\"#\",%model_BEs),\"\\n\";\n      }\n      else {\n\tprint \"---empty text---\\n\";\n      }\n    }\n    #------------------------------------------------\n    # compute BE score\n    &getBEScore(\\%model_BEs,\\%peer_BEs,\\$BEHit,\\$BEScore);\n    # collect hit and count for each models\n    # This will effectively clip hit for each model; therefore would not give extra\n    # credit to reducdant information contained in the peer summary.\n    if($scoreMode eq \"A\") {\n      $totalBEHit+=$BEHit;\n      $totalBECount+=$model_BEs{\"_cn_\"};\n      $totalBECountP+=$peer_BEs{\"_cn_\"};\n    }\n    elsif($scoreMode eq \"B\") {\n      if($BEScore>$BEScoreBest) {\n\t# only take a better score (i.e. better match)\n\t$BEScoreBest=$BEScore;\n\t$totalBEHit=$BEHit;\n\t$totalBECount=$model_BEs{\"_cn_\"};\n\t$totalBECountP=$peer_BEs{\"_cn_\"};\n      }\n    }\n    else {\n      # use average mode\n      $totalBEHit+=$BEHit;\n      $totalBECount+=$model_BEs{\"_cn_\"};\n      $totalBECountP+=$peer_BEs{\"_cn_\"};\n    }\n    if($debug) {\n      print \"***M $modelPath\\n\";\n    }\n  }\n  # prepare score result for return\n  # uniBE\n  push(@$results,$totalBECount); # total number of nbes in models\n  push(@$results,$totalBEHit);\n  if($totalBECount!=0) {\n    $BEScore=sprintf(\"%7.5f\",$totalBEHit/$totalBECount);\n  }\n  else {\n    $BEScore=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$BEScore);\n  push(@$results,$totalBECountP); # total number of nBEs in peers\n  if($totalBECountP!=0) {\n    $BEScoreP=sprintf(\"%7.5f\",$totalBEHit/$totalBECountP);\n  }\n  else {\n    $BEScoreP=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$BEScoreP);      # precision score\n  if((1-$alpha)*$BEScoreP+$alpha*$BEScore>0) {\n    $BEScoreF=sprintf(\"%7.5f\",($BEScoreP*$BEScore)/((1-$alpha)*$BEScoreP+$alpha*$BEScore));\n  }\n  else {\n    $BEScoreF=sprintf(\"%7.5f\",0);\n  }\n  push(@$results,$BEScoreF);      # f1-measure score\n  if($debug) {\n    print \"total BE-$BEMode model count: $totalBECount\\n\";\n    print \"total BE-$BEMode peer count: $totalBECountP\\n\";\n    print \"total BE-$BEMode hit: $totalBEHit\\n\";\n    print \"total ROUGE-BE-$BEMode\\-R: $BEScore\\n\";\n    print \"total ROUGE-BE-$BEMode\\-P: $BEScoreP\\n\";\n    print \"total ROUGE-BE-$BEMode\\-F: $BEScoreF\\n\";\n  }\n}\n\nsub readTextOld {\n  my $inPath=shift;\n  my $tokenizedText=shift;\n  my $type=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my ($text,$bsize,$wsize,@words,$done);\n  \n  $$tokenizedText=undef;\n  $bsize=0;\n  $wsize=0;\n  $done=0;\n  open(TEXT,$inPath)||die \"Cannot open $inPath\\n\";\n  if($type=~/^SEE$/oi) {\n    while(defined($line=<TEXT>)) { # SEE abstract format\n      if($line=~/^<a (size=\\\"[0-9]+\\\" )?name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o) {\n\t$text=$3;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  elsif($type=~/^ISI$/oi) { # ISI standard sentence by sentence format\n    while(defined($line=<TEXT>)) {\n      if($line=~/^<S SNTNO=\\\"[0-9a-z,]+\\\">([^<]+)<\\/S>/o) {\n\t$text=$1;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  elsif($type=~/^SPL$/oi) { # SPL one Sentence Per Line format\n    while(defined($line=<TEXT>)) {\n      chomp($line);\n      $line=~s/^\\s+//;\n      $line=~s/\\s+$//;\n      if(defined($line)&&length($line)>0) {\n\t$text=$line;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  else {\n    close(TEXT);\n    die \"Unknown input format: $type\\n\";\n  }\n  close(TEXT);\n  if(defined($$tokenizedText)) {\n    $$tokenizedText=~s/\\-/ \\- /g;\n    $$tokenizedText=~s/[^A-Za-z0-9\\-]/ /g;\n    $$tokenizedText=~s/^\\s+//;\n    $$tokenizedText=~s/\\s+$//;\n    $$tokenizedText=~s/\\s+/ /g;\n  }\n  else {\n    print STDERR \"readText: $inPath -> empty text\\n\";\n  }\n  #    print \"($$tokenizedText)\\n\\n\";\n}\n\n# enforce length cutoff at the file level\n# convert different input format into SPL format then put them into\n# tokenizedText\nsub readText {\n  my $inPath=shift;\n  my $tokenizedText=shift;\n  my $type=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my ($text,$bsize,$wsize,@words,$done,@sntList);\n  \n  $$tokenizedText=undef;\n  $bsize=0;\n  $wsize=0;\n  $done=0;\n  @sntList=();\n  open(TEXT,$inPath)||die \"Cannot open $inPath\\n\";\n  if($type=~/^SEE$/oi) {\n    while(defined($line=<TEXT>)) { # SEE abstract format\n      if($line=~/^<a size=\\\"[0-9]+\\\" name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o||\n\t $line=~/^<a name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o) {\n\t$text=$2;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  elsif($type=~/^ISI$/oi) { # ISI standard sentence by sentence format\n    while(defined($line=<TEXT>)) {\n      if($line=~/^<S SNTNO=\\\"[0-9a-z,]+\\\">([^<]+)<\\/S>/o) {\n\t$text=$1;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  elsif($type=~/^SPL$/oi) { # SPL one Sentence Per Line format\n    while(defined($line=<TEXT>)) {\n      chomp($line);\n      if(defined($line)&&length($line)>0) {\n\t$text=$line;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  else {\n    close(TEXT);\n    die \"Unknown input format: $type\\n\";\n  }\n  close(TEXT);\n  if($lengthLimit==0&&$byteLimit==0) {\n    $$tokenizedText=join(\" \",@sntList);\n  }\n  elsif($lengthLimit!=0) {\n    my ($tmpText);\n    $tmpText=\"\";\n    $tmpTextLen=0;\n    foreach $s (@sntList) {\n      my ($sLen,@tokens);\n      @tokens=split(/\\s+/,$s);\n      $sLen=scalar @tokens;\n      if($tmpTextLen+$sLen<$lengthLimit) {\n\tif($tmpTextLen!=0) {\n\t  $tmpText.=\" $s\";\n\t}\n\telse {\n\t  $tmpText.=\"$s\";\n\t}\n\t$tmpTextLen+=$sLen;\n      }\n      else {\n\tif($tmpTextLen>0) {\n\t  $tmpText.=\" \";\n\t}\n\t$tmpText.=join(\" \",@tokens[0..$lengthLimit-$tmpTextLen-1]);\n\tlast;\n      }\n    }\n    if(length($tmpText)>0) {\n      $$tokenizedText=$tmpText;\n    }\n  }\n  elsif($byteLimit!=0) {\n    my ($tmpText);\n    $tmpText=\"\";\n    $tmpTextLen=0;\n    foreach $s (@sntList) {\n      my ($sLen);\n      $sLen=length($s);\n      if($tmpTextLen+$sLen<$byteLimit) {\n\tif($tmpTextLen!=0) {\n\t  $tmpText.=\" $s\";\n\t}\n\telse {\n\t  $tmpText.=\"$s\";\n\t}\n\t$tmpTextLen+=$sLen;\n      }\n      else {\n\tif($tmpTextLen>0) {\n\t  $tmpText.=\" \";\n\t}\n\t$tmpText.=substr($s,0,$byteLimit-$tmpTextLen);\n\tlast;\n      }\n    }\n    if(length($tmpText)>0) {\n      $$tokenizedText=$tmpText;\n    }\n  }\n  if(defined($$tokenizedText)) {\n    $$tokenizedText=~s/\\-/ \\- /g;\n    $$tokenizedText=~s/[^A-Za-z0-9\\-]/ /g;\n    $$tokenizedText=~s/^\\s+//;\n    $$tokenizedText=~s/\\s+$//;\n    $$tokenizedText=~s/\\s+/ /g;\n  }\n  else {\n    print STDERR \"readText: $inPath -> empty text\\n\";\n  }\n  #    print \"($$tokenizedText)\\n\\n\";\n}\n\nsub readBE {\n  my $inPath=shift;\n  my $BEList=shift;\n  my $type=shift;\n  my ($line);\n  \n  open(TEXT,$inPath)||die \"Cannot open $inPath\\n\";\n  if(defined($opt_v)) {\n    print STDERR \"$inPath\\n\";\n  }\n  if($type=~/^SIMPLE$/oi) {\n    while(defined($line=<TEXT>)) { # Simple BE triple format\n      chomp($line);\n      push(@{$BEList},$line);\n    }\n  }\n  elsif($type=~/^ISI$/oi) { # ISI standard BE format\n    while(defined($line=<TEXT>)) {\n      # place holder\n    }\n  }\n  else {\n    close(TEXT);\n    die \"Unknown input format: $type\\n\";\n  }\n  close(TEXT);\n  if(scalar @{$BEList} ==0) {\n    print STDERR \"readBE: $inPath -> empty text\\n\";\n  }\n}\n\nsub checkSummarySize {\n  my $tokenizedText=shift;\n  my $text=shift;\n  my $wsize=shift;\n  my $bsize=shift;\n  my $done=shift;\n  my $lenghtLimit=shift;\n  my $byteLimit=shift;\n  my (@words);\n  \n  @words=split(/\\s+/,$$text);\n  if(($lengthLimit==0&&$byteLimit==0)||\n     ($lengthLimit!=0&&(scalar @words)+$$wsize<=$lengthLimit)||\n     ($byteLimit!=0&&length($$text)+$$bsize<=$byteLimit)) {\n    if(defined($$tokenizedText)) {\n      $$tokenizedText.=\" $$text\";\n    }\n    else {\n      $$tokenizedText=$$text;\n    }\n    $$bsize+=length($$text);\n    $$wsize+=(scalar @words);\n  }\n  elsif($lengthLimit!=0&&(scalar @words)+$$wsize>$lengthLimit) {\n    if($$done==0) {\n      if(defined($$tokenizedText)) {\n\t$$tokenizedText.=\" \";\n\t$$tokenizedText.=join(\" \",@words[0..$lengthLimit-$$wsize-1]);\n      }\n      else {\n\t$$tokenizedText=join(\" \",@words[0..$lengthLimit-$$wsize-1]);\n      }\n      $$done=1;\n    }\n  }\n  elsif($byteLimit!=0&&length($$text)+$$bsize>$byteLimit) {\n    if($$done==0) {\n      if(defined($$tokenizedText)) {\n\t$$tokenizedText.=\" \";\n\t$$tokenizedText.=substr($$text,0,$byteLimit-$$bsize);\n      }\n      else {\n\t$$tokenizedText=substr($$text,0,$byteLimit-$$bsize);\n\t\n      }\n      $$done=1;\n    }\n  }\n}\n\n# LCS computing is based on unit and cannot lump all the text together\n# as in computing ngram co-occurrences\nsub readText_LCS {\n  my $inPath=shift;\n  my $tokenizedText=shift;\n  my $type=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my ($text,$t,$bsize,$wsize,$done,@sntList);\n  \n  @{$tokenizedText}=();\n  $bsize=0;\n  $wsize=0;\n  $done=0;\n  @sntList=();\n  open(TEXT,$inPath)||die \"Cannot open $inPath\\n\";\n  if($type=~/^SEE$/oi) {\n    while(defined($line=<TEXT>)) { # SEE abstract format\n      if($line=~/^<a size=\\\"[0-9]+\\\" name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o||\n\t $line=~/^<a name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o) {\n\t$text=$2;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  elsif($type=~/^ISI$/oi) { # ISI standard sentence by sentence format\n    while(defined($line=<TEXT>)) {\n      if($line=~/^<S SNTNO=\\\"[0-9a-z,]+\\\">([^<]+)<\\/S>/o) {\n\t$text=$1;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  elsif($type=~/^SPL$/oi) { # SPL one Sentence Per Line format\n    while(defined($line=<TEXT>)) {\n      chomp($line);\n      if(defined($line)&&length($line)>0) {\n\t$text=$line;\n\t$text=~tr/A-Z/a-z/;\n\tpush(@sntList,$text);\n      }\n    }\n  }\n  else {\n    close(TEXT);\n    die \"Unknown input format: $type\\n\";\n  }\n  close(TEXT);\n  if($lengthLimit==0&&$byteLimit==0) {\n    @{$tokenizedText}=@sntList;\n  }\n  elsif($lengthLimit!=0) {\n    my ($tmpText);\n    $tmpText=\"\";\n    $tmpTextLen=0;\n    foreach $s (@sntList) {\n      my ($sLen,@tokens);\n      @tokens=split(/\\s+/,$s);\n      $sLen=scalar @tokens;\n      if($tmpTextLen+$sLen<$lengthLimit) {\n\t$tmpTextLen+=$sLen;\n\tpush(@{$tokenizedText},$s);\n      }\n      else {\n\tpush(@{$tokenizedText},join(\" \",@tokens[0..$lengthLimit-$tmpTextLen-1]));\n\tlast;\n      }\n    }\n  }\n  elsif($byteLimit!=0) {\n    my ($tmpText);\n    $tmpText=\"\";\n    $tmpTextLen=0;\n    foreach $s (@sntList) {\n      my ($sLen);\n      $sLen=length($s);\n      if($tmpTextLen+$sLen<$byteLimit) {\n\tpush(@{$tokenizedText},$s);\n      }\n      else {\n\tpush(@{$tokenizedText},substr($s,0,$byteLimit-$tmpTextLen));\n\tlast;\n      }\n    }\n  }\n  if(defined(@{$tokenizedText}>0)) {\n    for($t=0;$t<@{$tokenizedText};$t++) {\n      $tokenizedText->[$t]=~s/\\-/ \\- /g;\n      $tokenizedText->[$t]=~s/[^A-Za-z0-9\\-]/ /g;\n      $tokenizedText->[$t]=~s/^\\s+//;\n      $tokenizedText->[$t]=~s/\\s+$//;\n      $tokenizedText->[$t]=~s/\\s+/ /g;\n    }\n  }\n  else {\n    print STDERR \"readText_LCS: $inPath -> empty text\\n\";\n  }\n}\n\n# LCS computing is based on unit and cannot lump all the text together\n# as in computing ngram co-occurrences\nsub readText_LCS_old {\n  my $inPath=shift;\n  my $tokenizedText=shift;\n  my $type=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my ($text,$t,$bsize,$wsize,$done);\n  \n  @{$tokenizedText}=();\n  $bsize=0;\n  $wsize=0;\n  $done=0;\n  open(TEXT,$inPath)||die \"Cannot open $inPath\\n\";\n  if($type=~/^SEE$/oi) {\n    while(defined($line=<TEXT>)) { # SEE abstract format\n      if($line=~/^<a (size=\\\"[0-9]+\\\" )?name=\\\"[0-9]+\\\">\\[([0-9]+)\\]<\\/a>\\s+<a href=\\\"\\#[0-9]+\\\" id=[0-9]+>([^<]+)/o) {\n\t$text=$3;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize_LCS($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  elsif($type=~/^ISI$/oi) { # ISI standard sentence by sentence format\n    while(defined($line=<TEXT>)) {\n      if($line=~/^<S SNTNO=\\\"[0-9a-z,]+\\\">([^<]+)<\\/S>/o) {\n\t$text=$1;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize_LCS($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  elsif($type=~/^SPL$/oi) { # SPL one Sentence Per Line format\n    while(defined($line=<TEXT>)) {\n      chomp($line);\n      $line=~s/^\\s+//;\n      $line=~s/\\s+$//;\n      if(defined($line)&&length($line)>0) {\n\t$text=$line;\n\t$text=~tr/A-Z/a-z/;\n\t&checkSummarySize_LCS($tokenizedText,\\$text,\\$wsize,\\$bsize,\\$done,$lengthLimit,$byteLimit);\n      }\n    }\n  }\n  else {\n    close(TEXT);\n    die \"Unknown input format: $type\\n\";\n  }\n  close(TEXT);\n  if(defined(@{$tokenizedText}>0)) {\n    for($t=0;$t<@{$tokenizedText};$t++) {\n      $tokenizedText->[$t]=~s/\\-/ \\- /g;\n      $tokenizedText->[$t]=~s/[^A-Za-z0-9\\-]/ /g;\n      $tokenizedText->[$t]=~s/^\\s+//;\n      $tokenizedText->[$t]=~s/\\s+$//;\n      $tokenizedText->[$t]=~s/\\s+/ /g;\n    }\n  }\n  else {\n    print STDERR \"readText_LCS: $inPath -> empty text\\n\";\n  }\n}\n\nsub checkSummarySize_LCS {\n  my $tokenizedText=shift;\n  my $text=shift;\n  my $wsize=shift;\n  my $bsize=shift;\n  my $done=shift;\n  my $lenghtLimit=shift;\n  my $byteLimit=shift;\n  my (@words);\n  \n  @words=split(/\\s+/,$$text);\n  if(($lengthLimit==0&&$byteLimit==0)||\n     ($lengthLimit!=0&&(scalar @words)+$$wsize<=$lengthLimit)||\n     ($byteLimit!=0&&length($$text)+$$bsize<=$byteLimit)) {\n    push(@{$tokenizedText},$$text);\n    $$bsize+=length($$text);\n    $$wsize+=(scalar @words);\n  }\n  elsif($lengthLimit!=0&&(scalar @words)+$$wsize>$lengthLimit) {\n    if($$done==0) {\n      push(@{$tokenizedText},$$text);\n      $$done=1;\n    }\n  }\n  elsif($byteLimit!=0&&length($$text)+$$bsize>$byteLimit) {\n    if($$done==0) {\n      push(@{$tokenizedText},$$text);\n      $$done=1;\n    }\n  }\n}\n\nsub ngramScore {\n  my $model_grams=shift;\n  my $peer_grams=shift;\n  my $hit=shift;\n  my $score=shift;\n  my ($s,$t,@tokens);\n  \n  $$hit=0;\n  @tokens=keys (%$model_grams);\n  foreach $t (@tokens) {\n    if($t ne \"_cn_\") {\n      my $h;\n      $h=0;\n      if(exists($peer_grams->{$t})) {\n\t$h=$peer_grams->{$t}<=$model_grams->{$t}?\n\t  $peer_grams->{$t}:$model_grams->{$t}; # clip\n\t$$hit+=$h;\n      }\n    }\n  }\n  if($model_grams->{\"_cn_\"}!=0) {\n    $$score=sprintf(\"%07.5f\",$$hit/$model_grams->{\"_cn_\"});\n  }\n  else {\n    # no instance of n-gram at this length\n    $$score=0;\n    #\tdie \"model n-grams has zero instance\\n\";\n  }\n}\n\nsub skipBigramScore {\n  my $model_grams=shift;\n  my $peer_grams=shift;\n  my $hit=shift;\n  my $score=shift;\n  my ($s,$t,@tokens);\n  \n  $$hit=0;\n  @tokens=keys (%$model_grams);\n  foreach $t (@tokens) {\n    if($t ne \"_cn_\") {\n      my $h;\n      $h=0;\n      if(exists($peer_grams->{$t})) {\n\t$h=$peer_grams->{$t}<=$model_grams->{$t}?\n\t  $peer_grams->{$t}:$model_grams->{$t}; # clip\n\t$$hit+=$h;\n      }\n    }\n  }\n  if($model_grams->{\"_cn_\"}!=0) {\n    $$score=sprintf(\"%07.5f\",$$hit/$model_grams->{\"_cn_\"});\n  }\n  else {\n    # no instance of n-gram at this length\n    $$score=0;\n    #\tdie \"model n-grams has zero instance\\n\";\n  }\n}\n\nsub lcs {\n  my $model=shift;\n  my $peer=shift;\n  my $hit=shift;\n  my $score=shift;\n  my $base=shift;\n  my $model_1grams=shift;\n  my $peer_1grams=shift;\n  my ($i,$j,@hitMask,@LCS);\n  \n  $$hit=0;\n  $$base=0;\n  # compute LCS length for each model/peer pair\n  for($i=0;$i<@{$model};$i++) {\n    # use @hitMask to make sure multiple peer hit won't be counted as multiple hits\n    @hitMask=();\n    for($j=0;$j<@{$model->[$i]};$j++) {\n      push(@hitMask,0); # initialize hit mask\n    }\n    $$base+=scalar @{$model->[$i]}; # add model length\n    for($j=0;$j<@{$peer};$j++) {\n      &lcs_inner($model->[$i],$peer->[$j],\\@hitMask);\n    }\n    @LCS=();\n    for($j=0;$j<@{$model->[$i]};$j++) {\n      if($hitMask[$j]==1) {\n\tif(exists($model_1grams->{$model->[$i][$j]})&&\n\t   exists($peer_1grams->{$model->[$i][$j]})&&\n\t   $model_1grams->{$model->[$i][$j]}>0&&\n\t   $peer_1grams->{$model->[$i][$j]}>0) {\n\t  $$hit++;\n\t  #---------------------------------------------\n\t  # bookkeeping to clip over counting\n\t  # everytime a hit is found it is deducted\n\t  # from both model and peer unigram count\n\t  # if a unigram count already involve in\n\t  # one LCS match then it will not be counted\n\t  # if it match another token in the model\n\t  # unit. This will make sure LCS score\n\t  # is always lower than unigram score\n\t  $model_1grams->{$model->[$i][$j]}--;\n\t  $peer_1grams->{$model->[$i][$j]}--;\n\t  push(@LCS,$model->[$i][$j]);\n\t}\n      }\n    }\n    if($debug) {\n      print \"LCS: \";\n      if(@LCS) {\n\tprint join(\" \",@LCS),\"\\n\";\n      }\n      else {\n\tprint \"-\\n\";\n      }\n    }\n  }\n  if($$base>0) {\n    $$score=$$hit/$$base;\n  }\n  else {\n    $$score=0;\n  }\n}\n\nsub lcs_inner {\n  my $model=shift;\n  my $peer=shift;\n  my $hitMask=shift;\n  my $m=scalar @$model; # length of model\n  my $n=scalar @$peer; # length of peer\n  my ($i,$j);\n  my (@c,@b);\n  \n  if(@{$model}==0) {\n    return;\n  }\n  @c=();\n  @b=();\n  # initialize boundary condition and\n  # the DP array\n  for($i=0;$i<=$m;$i++) {\n    push(@c,[]);\n    push(@b,[]);\n    for($j=0;$j<=$n;$j++) {\n      push(@{$c[$i]},0);\n      push(@{$b[$i]},0);\n    }\n  }\n  for($i=1;$i<=$m;$i++) {\n    for($j=1;$j<=$n;$j++) {\n      if($model->[$i-1] eq $peer->[$j-1]) {\n\t# recursively solve the i-1 subproblem\n\t$c[$i][$j]=$c[$i-1][$j-1]+1;\n\t$b[$i][$j]=\"\\\\\"; # go diagonal\n      }\n      elsif($c[$i-1][$j]>=$c[$i][$j-1]) {\n\t$c[$i][$j]=$c[$i-1][$j];\n\t$b[$i][$j]=\"^\"; # go up\n      }\n      else {\n\t$c[$i][$j]=$c[$i][$j-1];\n\t$b[$i][$j]=\"<\"; # go left\n      }\n    }\n  }\n  &markLCS($hitMask,\\@b,$m,$n);\n}\n\nsub wlcs {\n  my $model=shift;\n  my $peer=shift;\n  my $hit=shift;\n  my $score=shift;\n  my $base=shift;\n  my $weightFactor=shift;\n  my $model_1grams=shift;\n  my $peer_1grams=shift;\n  my ($i,$j,@hitMask,@LCS,$hitLen);\n  \n  $$hit=0;\n  $$base=0;\n  # compute LCS length for each model/peer pair\n  for($i=0;$i<@{$model};$i++) {\n    # use @hitMask to make sure multiple peer hit won't be counted as multiple hits\n    @hitMask=();\n    for($j=0;$j<@{$model->[$i]};$j++) {\n      push(@hitMask,0); # initialize hit mask\n    }\n    $$base+=&wlcsWeight(scalar @{$model->[$i]},$weightFactor); # add model length\n    for($j=0;$j<@{$peer};$j++) {\n      &wlcs_inner($model->[$i],$peer->[$j],\\@hitMask,$weightFactor);\n    }\n    @LCS=();\n    $hitLen=0;\n    for($j=0;$j<@{$model->[$i]};$j++) {\n      if($hitMask[$j]==1) {\n\tif(exists($model_1grams->{$model->[$i][$j]})&&\n\t   exists($peer_1grams->{$model->[$i][$j]})&&\n\t   $model_1grams->{$model->[$i][$j]}>0&&\n\t   $peer_1grams->{$model->[$i][$j]}>0) {\n\t  $hitLen++;\n\t  if($j+1<@{$model->[$i]}&&$hitMask[$j+1]==0) {\n\t    $$hit+=&wlcsWeight($hitLen,$weightFactor);\n\t    $hitLen=0; # reset hit length\n\t  }\n\t  elsif($j+1==@{$model->[$i]}) {\n\t    # end of sentence\n\t    $$hit+=&wlcsWeight($hitLen,$weightFactor);\n\t    $hitLen=0; # reset hit length\n\t  }\n\t  #---------------------------------------------\n\t  # bookkeeping to clip over counting\n\t  # everytime a hit is found it is deducted\n\t  # from both model and peer unigram count\n\t  # if a unigram count already involve in\n\t  # one LCS match then it will not be counted\n\t  # if it match another token in the model\n\t  # unit. This will make sure LCS score\n\t  # is always lower than unigram score\n\t  $model_1grams->{$model->[$i][$j]}--;\n\t  $peer_1grams->{$model->[$i][$j]}--;\n\t  push(@LCS,$model->[$i][$j]);\n\t}\n      }\n    }\n    if($debug) {\n      print \"ROUGE-W: \";\n      if(@LCS) {\n\tprint join(\" \",@LCS),\"\\n\";\n      }\n      else {\n\tprint \"-\\n\";\n      }\n    }\n  }\n  $$score=wlcsWeightInverse($$hit/$$base,$weightFactor);\n}\n\nsub wlcsWeight {\n  my $r=shift;\n  my $power=shift;\n  \n  return $r**$power;\n}\n\nsub wlcsWeightInverse {\n  my $r=shift;\n  my $power=shift;\n  \n  return $r**(1/$power);\n}\n\nsub wlcs_inner {\n  my $model=shift;\n  my $peer=shift;\n  my $hitMask=shift;\n  my $weightFactor=shift;\n  my $m=scalar @$model; # length of model\n  my $n=scalar @$peer; # length of peer\n  my ($i,$j);\n  my (@c,@b,@l);\n  \n  if(@{$model}==0) {\n    return;\n  }\n  @c=();\n  @b=();\n  @l=(); # the length of consecutive matches so far\n  # initialize boundary condition and\n  # the DP array\n  for($i=0;$i<=$m;$i++) {\n    push(@c,[]);\n    push(@b,[]);\n    push(@l,[]);\n    for($j=0;$j<=$n;$j++) {\n      push(@{$c[$i]},0);\n      push(@{$b[$i]},0);\n      push(@{$l[$i]},0);\n    }\n  }\n  for($i=1;$i<=$m;$i++) {\n    for($j=1;$j<=$n;$j++) {\n      if($model->[$i-1] eq $peer->[$j-1]) {\n\t# recursively solve the i-1 subproblem\n\t$k=$l[$i-1][$j-1];\n\t$c[$i][$j]=$c[$i-1][$j-1]+&wlcsWeight($k+1,$weightFactor)-&wlcsWeight($k,$weightFactor);\n\t$b[$i][$j]=\"\\\\\"; # go diagonal\n\t$l[$i][$j]=$k+1; # extend the consecutive matching sequence\n      }\n      elsif($c[$i-1][$j]>=$c[$i][$j-1]) {\n\t$c[$i][$j]=$c[$i-1][$j];\n\t$b[$i][$j]=\"^\"; # go up\n\t$l[$i][$j]=0; # no match at this position\n      }\n      else {\n\t$c[$i][$j]=$c[$i][$j-1];\n\t$b[$i][$j]=\"<\"; # go left\n\t$l[$i][$j]=0; # no match at this position\n      }\n    }\n  }\n  &markLCS($hitMask,\\@b,$m,$n);\n}\n\nsub markLCS {\n  my $hitMask=shift;\n  my $b=shift;\n  my $i=shift;\n  my $j=shift;\n  \n  while($i!=0&&$j!=0) {\n    if($b->[$i][$j] eq \"\\\\\") {\n      $i--;\n      $j--;\n      $hitMask->[$i]=1; # mark current model position as a hit\n    }\n    elsif($b->[$i][$j] eq \"^\") {\n      $i--;\n    }\n    elsif($b->[$i][$j] eq \"<\") {\n      $j--;\n    }\n    else {\n      die \"Illegal move in markLCS: ($i,$j): \\\"$b->[$i][$j]\\\".\\n\";\n    }\n  }\n}\n\n# currently only support simple lexical matching\nsub getBEScore {\n  my $modelBEs=shift;\n  my $peerBEs=shift;\n  my $hit=shift;\n  my $score=shift;\n  my ($s,$t,@tokens);\n  \n  $$hit=0;\n  @tokens=keys (%$modelBEs);\n  foreach $t (@tokens) {\n    if($t ne \"_cn_\") {\n      my $h;\n      $h=0;\n      if(exists($peerBEs->{$t})) {\n\t$h=$peerBEs->{$t}<=$modelBEs->{$t}?\n\t  $peerBEs->{$t}:$modelBEs->{$t}; # clip\n\t$$hit+=$h;\n\tif(defined($opt_v)) {\n\t  print \"* Match: $t\\n\";\n\t}\n      }\n    }\n  }\n  if($modelBEs->{\"_cn_\"}!=0) {\n    $$score=sprintf(\"%07.5f\",$$hit/$modelBEs->{\"_cn_\"});\n  }\n  else {\n    # no instance of BE at this length\n    $$score=0;\n    #\tdie \"model BE has zero instance\\n\";\n  }\n}\n\nsub MorphStem {\n  my $token=shift;\n  my ($os,$ltoken);\n  \n  if(!defined($token)||length($token)==0) {\n    return undef;\n  }\n  \n  $ltoken=$token;\n  $ltoken=~tr/A-Z/a-z/;\n  if(exists($exceptiondb{$ltoken})) {\n    return $exceptiondb{$ltoken};\n  }\n  $os=$ltoken;\n  return stem($os);\n}\n\nsub createNGram {\n  my $text=shift;\n  my $g=shift;\n  my $NSIZE=shift;\n  my @mx_tokens=();\n  my @m_tokens=();\n  my ($i,$j);\n  my ($gram);\n  my ($count);\n  my ($byteSize);\n  \n  # remove stopwords\n  if($useStopwords) {\n    %stopwords=(); # consider stop words\n  }\n  unless(defined($text)) {\n    $g->{\"_cn_\"}=0;\n    return;\n  }\n  @mx_tokens=split(/\\s+/,$text);\n  $byteSize=0;\n  for($i=0;$i<=$#mx_tokens;$i++) {\n    unless(exists($stopwords{$mx_tokens[$i]})) {\n      $byteSize+=length($mx_tokens[$i])+1; # the length of words in bytes so far + 1 space \n      if($mx_tokens[$i]=~/^[a-z0-9\\$]/o) {\n\tif(defined($opt_m)) {\n\t  # use stemmer\n\t  # only consider words starting with these characters\n\t  # use Porter stemmer\n\t  my $stem;\n\t  $stem=$mx_tokens[$i];\n\t  if(length($stem)>3) {\n\t    push(@m_tokens,&MorphStem($stem));\n\t  }\n\t  else { # no stemmer as default\n\t    push(@m_tokens,$mx_tokens[$i]);\n\t  }\n\t}\n\telse { # no stemmer\n\t  push(@m_tokens,$mx_tokens[$i]);\n\t}\n      }\n    }\n  }\n  #-------------------------------------\n  # create ngram\n  $count=0;\n  for($i=0;$i<=$#m_tokens-$NSIZE+1;$i++) {\n    $gram=$m_tokens[$i];\n    for($j=$i+1;$j<=$i+$NSIZE-1;$j++) {\n      $gram.=\" $m_tokens[$j]\";\n    }\n    $count++;\n    unless(exists($g->{$gram})) {\n      $g->{$gram}=1;\n    }\n    else {\n      $g->{$gram}++;\n    }\n  }\n  # save total number of tokens\n  $g->{\"_cn_\"}=$count;\n}\n\nsub createSkipBigram {\n  my $text=shift;\n  my $g=shift;\n  my $skipDistance=shift;\n  my @mx_tokens=();\n  my @m_tokens=();\n  my ($i,$j);\n  my ($gram);\n  my ($count);\n  my ($byteSize);\n  \n  # remove stopwords\n  if($useStopwords) {\n    %stopwords=(); # consider stop words\n  }\n  unless(defined($text)) {\n    $g->{\"_cn_\"}=0;\n    return;\n  }\n  @mx_tokens=split(/\\s+/,$text);\n  $byteSize=0;\n  for($i=0;$i<=$#mx_tokens;$i++) {\n    unless(exists($stopwords{$mx_tokens[$i]})) {\n      $byteSize+=length($mx_tokens[$i])+1; # the length of words in bytes so far + 1 space \n      if($mx_tokens[$i]=~/^[a-z0-9\\$]/o) {\n\tif(defined($opt_m)) {\n\t  # use stemmer\n\t  # only consider words starting with these characters\n\t  # use Porter stemmer\n\t  my $stem;\n\t  $stem=$mx_tokens[$i];\n\t  if(length($stem)>3) {\n\t    push(@m_tokens,&MorphStem($stem));\n\t  }\n\t  else { # no stemmer as default\n\t    push(@m_tokens,$mx_tokens[$i]);\n\t  }\n\t}\n\telse { # no stemmer\n\t  push(@m_tokens,$mx_tokens[$i]);\n\t}\n      }\n    }\n  }\n  #-------------------------------------\n  # create ngram\n  $count=0;\n  for($i=0;$i<$#m_tokens;$i++) {\n    if(defined($opt_u)) {\n      # add unigram count\n      $gram=$m_tokens[$i];\n      $count++;\n      unless(exists($g->{$gram})) {\n\t$g->{$gram}=1;\n      }\n      else {\n\t$g->{$gram}++;\n      }\n    }\n    for($j=$i+1;\n\t$j<=$#m_tokens&&($skipDistance<0||$j<=$i+$skipDistance+1);\n\t$j++) {\n      $gram=$m_tokens[$i];\n      $gram.=\" $m_tokens[$j]\";\n      $count++;\n      unless(exists($g->{$gram})) {\n\t$g->{$gram}=1;\n      }\n      else {\n\t$g->{$gram}++;\n      }\n    }\n  }\n  # save total number of tokens\n  $g->{\"_cn_\"}=$count;\n}\n\nsub createBE {\n  my $BEList=shift;\n  my $BEMap=shift;\n  my $BEMode=shift;\n  my ($i);\n  \n  $BEMap->{\"_cn_\"}=0;\n  unless(scalar @{$BEList} > 0) {\n    return;\n  }\n  for($i=0;$i<=$#{$BEList};$i++) {\n    my (@fds);\n    my ($be,$stemH,$stemM);\n    $be=$BEList->[$i];\n    $be=~tr/A-Z/a-z/;\n    @fds=split(/\\|/,$be);\n    if(@fds!=3) {\n      print STDERR \"Basic Element (BE) input file is invalid: *$be*\\n\";\n      print STDERR \"A BE file has to be in this format per line: HEAD|MODIFIER|RELATION\\n\";\n      die \"For more infomation about BE, go to: http://www.isi.edu/~cyl/BE\\n\";\n    }\n    $stemH=$fds[0];\n    $stemM=$fds[1];\n    if(defined($opt_m)) {\n      # use stemmer\n      # only consider words starting with these characters\n      # use Porter stemmer\n      if(length($stemH)>3) {\n\t$stemH=&MorphStemMulti($stemH);\n      }\n      if($stemM ne \"NIL\"&&\n\t length($stemM)>3) {\n\t$stemM=&MorphStemMulti($stemM);\n      }\n    }\n    if($BEMode eq \"H\"&&\n      $stemM eq \"nil\") {\n      unless(exists($BEMap->{$stemH})) {\n\t$BEMap->{$stemH}=0;\n      }\n      $BEMap->{$stemH}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n    elsif($BEMode eq \"HM\"&&\n\t  $stemM ne \"nil\") {\n      my $pair=\"$stemH|$stemM\";\n      unless(exists($BEMap->{$pair})) {\n\t$BEMap->{$pair}=0;\n      }\n      $BEMap->{$pair}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n    elsif($BEMode eq \"HMR\"&&\n\t  $fds[2] ne \"nil\") {\n      my $triple=\"$stemH|$stemM|$fds[2]\";\n      unless(exists($BEMap->{$triple})) {\n\t$BEMap->{$triple}=0;\n      }\n      $BEMap->{$triple}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n    elsif($BEMode eq \"HM1\") {\n      my $pair=\"$stemH|$stemM\";\n      unless(exists($BEMap->{$pair})) {\n\t$BEMap->{$pair}=0;\n      }\n      $BEMap->{$pair}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n    elsif($BEMode eq \"HMR1\"&&\n\t  $fds[1] ne \"nil\") { \n      # relation can be \"NIL\" but modifier has to have value\n      my $triple=\"$stemH|$stemM|$fds[2]\";\n      unless(exists($BEMap->{$triple})) {\n\t$BEMap->{$triple}=0;\n      }\n      $BEMap->{$triple}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n    elsif($BEMode eq \"HMR2\") {\n      # modifier and relation can be \"NIL\"\n      my $triple=\"$stemH|$stemM|$fds[2]\";\n      unless(exists($BEMap->{$triple})) {\n\t$BEMap->{$triple}=0;\n      }\n      $BEMap->{$triple}++;\n      $BEMap->{\"_cn_\"}++;\n    }\n  }\n}\n\nsub MorphStemMulti {\n  my $string=shift;\n  my (@tokens,@stems,$t,$i);\n  \n  @tokens=split(/\\s+/,$string);\n  foreach $t (@tokens) {\n    if($t=~/[A-Za-z0-9]/o&&\n       $t!~/(-LRB-|-RRB-|-LSB-|-RSB-|-LCB-|-RCB-)/o) {\n      my $s;\n      if(defined($s=&MorphStem($t))) {\n\t$t=$s;\n      }\n      push(@stems,$t);\n    }\n    else {\n      push(@stems,$t);\n    }\n  }\n  return join(\" \",@stems);\n}\n\nsub tokenizeText {\n  my $text=shift;\n  my $tokenizedText=shift;\n  my @mx_tokens=();\n  my ($i,$byteSize);\n  \n  # remove stopwords\n  if($useStopwords) {\n    %stopwords=(); # consider stop words\n  }\n  unless(defined($text)) {\n    return;\n  }\n  @mx_tokens=split(/\\s+/,$text);\n  $byteSize=0;\n  @{$tokenizedText}=();\n  for($i=0;$i<=$#mx_tokens;$i++) {\n    unless(exists($stopwords{$mx_tokens[$i]})) {\n      $byteSize+=length($mx_tokens[$i])+1; # the length of words in bytes so far + 1 space \n      if($mx_tokens[$i]=~/^[a-z0-9\\$]/o) {\n\tif(defined($opt_m)) {\n\t  # use stemmer\n\t  # only consider words starting with these characters\n\t  # use Porter stemmer\n\t  my $stem;\n\t  $stem=$mx_tokens[$i];\n\t  if(length($stem)>3) {\n\t    push(@{$tokenizedText},&MorphStem($stem));\n\t  }\n\t  else { # no stemmer as default\n\t    push(@{$tokenizedText},$mx_tokens[$i]);\n\t  }\n\t}\n\telse { # no stemmer\n\t  push(@{$tokenizedText},$mx_tokens[$i]);\n\t}\n      }\n    }\n  }\n}\n\nsub tokenizeText_LCS {\n  my $text=shift;\n  my $tokenizedText=shift;\n  my $lengthLimit=shift;\n  my $byteLimit=shift;\n  my @mx_tokens=();\n  my ($i,$byteSize,$t,$done);\n  \n  # remove stopwords\n  if($useStopwords) {\n    %stopwords=(); # consider stop words\n  }\n  if(@{$text}==0) {\n    return;\n  }\n  $byteSize=0;\n  @{$tokenizedText}=();\n  $done=0;\n  for($t=0;$t<@{$text}&&$done==0;$t++) {\n    @mx_tokens=split(/\\s+/,$text->[$t]);\n    # tokenized array for each separate unit (for example, sentence)\n    push(@{$tokenizedText},[]);\n    for($i=0;$i<=$#mx_tokens;$i++) {\n      unless(exists($stopwords{$mx_tokens[$i]})) {\n\t$byteSize+=length($mx_tokens[$i])+1; # the length of words in bytes so far + 1 space \n\tif($mx_tokens[$i]=~/^[a-z0-9\\$]/o) {\n\t  if(defined($opt_m)) {\n\t    # use stemmer\n\t    # only consider words starting with these characters\n\t    # use Porter stemmer\n\t    my $stem;\n\t    $stem=$mx_tokens[$i];\n\t    if(length($stem)>3) {\n\t      push(@{$tokenizedText->[$t]},&MorphStem($stem));\n\t    }\n\t    else { # no stemmer as default\n\t      push(@{$tokenizedText->[$t]},$mx_tokens[$i]);\n\t    }\n\t  }\n\t  else { # no stemmer\n\t    push(@{$tokenizedText->[$t]},$mx_tokens[$i]);\n\t  }\n\t}\n      }\n    }\n  }\n}\n\n# Input file configuration is a list of peer/model pair for each evaluation\n# instance. Each evaluation pair is in a line separated by white spaces\n# characters.\nsub readFileList {\n  my ($ROUGEEvals)=shift;\n  my ($ROUGEEvalIDs)=shift;\n  my ($ROUGEPeerIDTable)=shift;\n  my ($doc)=shift;\n  my ($evalID,$pair);\n  my ($inputFormat,$peerFile,$modelFile,$peerID,$modelID);\n  my (@files);\n\n  $evalID=1;  # automatically generated evaluation ID starting from 1\n  $peerID=$systemID;\n  $modelID=\"M\";\n  unless(exists($ROUGEPeerIDTable->{$peerID})) {\n    $ROUGEPeerIDTable->{$peerID}=1;\n  }\n  while(defined($pair=<$doc>)) {\n    my ($peerPath,$modelPath);\n    if($pair!~/^\\#/o&&\n       $pair!~/^\\s*$/o) { # Lines start with '#' is a comment line\n      chomp($pair);\n      $pair=~s/^\\s+//;\n      $pair=~s/\\s+$//;\n      @files=split(/\\s+/,$pair);\n      if(scalar @files < 2) {\n\tdie \"File list has to have at least 2 filenames per line (peer model1 model2 ... modelN)\\n\";\n      }\n      $peerFile=$files[0];\n      unless(exists($ROUGEEvals->{$evalID})) {\n\t$ROUGEEvals->{$evalID}={};\n\tpush(@{$ROUGEEvalIDs},$evalID);\n\t$ROUGEEvals->{$evalID}{\"IF\"}=$opt_z;\n      }\n      unless(exists($ROUGEPeerIDTable->{$peerID})) {\n\t$ROUGEPeerIDTable->{$peerID}=1; # save peer ID for reference\n      }\n      if(exists($ROUGEEvals->{$evalID})) {\n\tunless(exists($ROUGEEvals->{$evalID}{\"Ps\"})) {\n\t  $ROUGEEvals->{$evalID}{\"Ps\"}={};\n\t  $ROUGEEvals->{$evalID}{\"PIDList\"}=[];\n\t}\n\tpush(@{$ROUGEEvals->{$evalID}{\"PIDList\"}},$peerID); # save peer IDs\n      }\n      else {\n\tdie \"(PEERS) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n      }\n      # remove leading and trailing newlines and\n      # spaces\n      if(exists($ROUGEEvals->{$evalID}{\"Ps\"})) {\n\t$ROUGEEvals->{$evalID}{\"Ps\"}{$peerID}=$peerFile; # save peer filename\n      }\n      else {\n\tdie \"(P) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n      }\n      for($mid=1;$mid<=$#files;$mid++) {\n\t$modelFile=$files[$mid];\n\tif(exists($ROUGEEvals->{$evalID})) {\n\t  unless(exists($ROUGEEvals->{$evalID}{\"Ms\"})) {\n\t    $ROUGEEvals->{$evalID}{\"Ms\"}={};\n\t    $ROUGEEvals->{$evalID}{\"MIDList\"}=[];\n\t  }\n\t  push(@{$ROUGEEvals->{$evalID}{\"MIDList\"}},\"$modelID.$mid\"); # save model IDs\n\t}\n\telse {\n\t  die \"(MODELS) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t}\n\t# remove leading and trailing newlines and\n\t# spaces\n\tif(exists($ROUGEEvals->{$evalID}{\"Ms\"})) {\n\t  $ROUGEEvals->{$evalID}{\"Ms\"}{\"$modelID.$mid\"}=$modelFile; # save peer filename\n\t}\n\telse {\n\t  die \"(M) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t}\n      }\n      $evalID++;\n    }\n  }\n}\n\n# read and parse ROUGE evaluation file\nsub readEvals {\n  my ($ROUGEEvals)=shift;\n  my ($ROUGEEvalIDs)=shift;\n  my ($ROUGEPeerIDTable)=shift;\n  my ($node)=shift;\n  my ($evalID)=shift;\n  my ($inputFormat,$peerRoot,$modelRoot,$peerFile,$modelFile,$peerID,$modelID);\n  \n  if(defined($opt_z)) {\n    # Input file configuration is a list of peer/model pair for each evaluation\n    # instance. Each evaluation pair is in a line separated by white spaces\n    # characters.\n    &readFileList($ROUGEEvals,$ROUGEEvalIDs,$ROUGEPeerIDTable,$node);\n    return;\n  }\n  # Otherwise, the input file is the standard ROUGE XML evaluation configuration\n  # file.\n  if($node->getNodeType==ELEMENT_NODE||\n     $node->getNodeType==DOCUMENT_NODE) {\n    if($node->getNodeType==ELEMENT_NODE) {\n      $nodeName=$node->getNodeName;\n      if($nodeName=~/^EVAL$/oi) {\n\t$evalID=$node->getAttributeNode(\"ID\")->getValue;\n\tunless(exists($ROUGEEvals->{$evalID})) {\n\t  $ROUGEEvals->{$evalID}={};\n\t  push(@{$ROUGEEvalIDs},$evalID);\n\t}\n\tforeach my $child ($node->getChildNodes()) {\n\t  &readEvals($ROUGEEvals,$ROUGEEvalIDs,$ROUGEPeerIDTable,$child,$evalID);\n\t}\n      }\n      elsif($nodeName=~/^INPUT-FORMAT$/oi) {\n\t$inputFormat=$node->getAttributeNode(\"TYPE\")->getValue;\n\tif($inputFormat=~/^(SEE|ISI|SPL|SIMPLE)$/oi) { # SPL: one sentence per line\n\t  if(exists($ROUGEEvals->{$evalID})) {\n\t    $ROUGEEvals->{$evalID}{\"IF\"}=$inputFormat;\n\t  }\n\t  else {\n\t    die \"(INPUT-FORMAT) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t  }\n\t}\n\telse {\n\t  die \"Unknown input type: $inputFormat\\n\";\n\t}\n      }\n      elsif($nodeName=~/^PEER-ROOT$/oi) {\n\tforeach my $child ($node->getChildNodes()) {\n\t  if($child->getNodeType==TEXT_NODE) {\n\t    $peerRoot=$child->getData;\n\t    # remove leading and trailing newlines and\n\t    # spaces\n\t    $peerRoot=~s/^[\\n\\s]+//;\n\t    $peerRoot=~s/[\\n\\s]+$//;\n\t    if(exists($ROUGEEvals->{$evalID})) {\n\t      $ROUGEEvals->{$evalID}{\"PR\"}=$peerRoot;\n\t    }\n\t    else {\n\t      die \"(PEER-ROOT) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t    }\n\t  }\n\t}\n      }\n      elsif($nodeName=~/^MODEL-ROOT$/oi) {\n\tforeach my $child ($node->getChildNodes()) {\n\t  if($child->getNodeType==TEXT_NODE) {\n\t    $modelRoot=$child->getData;\n\t    # remove leading and trailing newlines and\n\t    # spaces\n\t    $modelRoot=~s/^[\\n\\s]+//;\n\t    $modelRoot=~s/[\\n\\s]+$//;\n\t    if(exists($ROUGEEvals->{$evalID})) {\n\t      $ROUGEEvals->{$evalID}{\"MR\"}=$modelRoot;\n\t    }\n\t    else {\n\t      die \"(MODEL-ROOT) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t    }\n\t  }\n\t}\n      }\n      elsif($nodeName=~/^PEERS$/oi) {\n\tforeach my $child ($node->getChildNodes()) {\n\t  if($child->getNodeType==ELEMENT_NODE&&\n\t     $child->getNodeName=~/^P$/oi) {\n\t    $peerID=$child->getAttributeNode(\"ID\")->getValue;\n\t    unless(exists($ROUGEPeerIDTable->{$peerID})) {\n\t      $ROUGEPeerIDTable->{$peerID}=1; # save peer ID for reference\n\t    }\n\t    if(exists($ROUGEEvals->{$evalID})) {\n\t      unless(exists($ROUGEEvals->{$evalID}{\"Ps\"})) {\n\t\t$ROUGEEvals->{$evalID}{\"Ps\"}={};\n\t\t$ROUGEEvals->{$evalID}{\"PIDList\"}=[];\n\t      }\n\t      push(@{$ROUGEEvals->{$evalID}{\"PIDList\"}},$peerID); # save peer IDs\n\t    }\n\t    else {\n\t      die \"(PEERS) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t    }\n\t    foreach my $grandchild ($child->getChildNodes()) {\n\t      if($grandchild->getNodeType==TEXT_NODE) {\n\t\t$peerFile=$grandchild->getData;\n\t\t# remove leading and trailing newlines and\n\t\t# spaces\n\t\t$peerFile=~s/^[\\n\\s]+//;\n\t\t$peerFile=~s/[\\n\\s]+$//;\n\t\tif(exists($ROUGEEvals->{$evalID}{\"Ps\"})) {\n\t\t  $ROUGEEvals->{$evalID}{\"Ps\"}{$peerID}=$peerFile; # save peer filename\n\t\t}\n\t\telse {\n\t\t  die \"(P) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t\t}\n\t      }\n\t    }\n\t  }\n\t}\n      }\n      elsif($nodeName=~/^MODELS$/oi) {\n\tforeach my $child ($node->getChildNodes()) {\n\t  if($child->getNodeType==ELEMENT_NODE&&\n\t     $child->getNodeName=~/^M$/oi) {\n\t    $modelID=$child->getAttributeNode(\"ID\")->getValue;\n\t    if(exists($ROUGEEvals->{$evalID})) {\n\t      unless(exists($ROUGEEvals->{$evalID}{\"Ms\"})) {\n\t\t$ROUGEEvals->{$evalID}{\"Ms\"}={};\n\t\t$ROUGEEvals->{$evalID}{\"MIDList\"}=[];\n\t      }\n\t      push(@{$ROUGEEvals->{$evalID}{\"MIDList\"}},$modelID); # save model IDs\n\t    }\n\t    else {\n\t      die \"(MODELS) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t    }\n\t    foreach my $grandchild ($child->getChildNodes()) {\n\t      if($grandchild->getNodeType==TEXT_NODE) {\n\t\t$modelFile=$grandchild->getData;\n\t\t# remove leading and trailing newlines and\n\t\t# spaces\n\t\t$modelFile=~s/^[\\n\\s]+//;\n\t\t$modelFile=~s/[\\n\\s]+$//;\n\t\tif(exists($ROUGEEvals->{$evalID}{\"Ms\"})) {\n\t\t  $ROUGEEvals->{$evalID}{\"Ms\"}{$modelID}=$modelFile; # save peer filename\n\t\t}\n\t\telse {\n\t\t  die \"(M) Evaluation database does not contain entry for this evaluation ID: $evalID\\n\";\n\t\t}\n\t      }\n\t    }\n\t  }\n\t}\n      }\n      else {\n\tforeach my $child ($node->getChildNodes()) {\n\t  &readEvals($ROUGEEvals,$ROUGEEvalIDs,$ROUGEPeerIDTable,$child,$evalID);\n\t}\n      }\n    }\n    else {\n      foreach my $child ($node->getChildNodes()) {\n\t&readEvals($ROUGEEvals,$ROUGEEvalIDs,$ROUGEPeerIDTable,$child,$evalID);\n      }\n    }\n  }\n  else {\n    if(defined($node->getChildNodes())) {\n      foreach my $child ($node->getChildNodes()) {\n\t&readEvals($ROUGEEvals,$ROUGEEvalIDs,$ROUGEPeerIDTable,$child,$evalID);\n      }\n    }\n  }\n}\n\n# Porter stemmer in Perl. Few comments, but it's easy to follow against the rules in the original\n# paper, in\n#\n#   Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,\n#   no. 3, pp 130-137,\n#\n# see also http://www.tartarus.org/~martin/PorterStemmer\n\n# Release 1\n\nlocal %step2list;\nlocal %step3list;\nlocal ($c, $v, $C, $V, $mgr0, $meq1, $mgr1, $_v);\n\n\nsub stem\n  {  my ($stem, $suffix, $firstch);\n     my $w = shift;\n     if (length($w) < 3) { return $w; } # length at least 3\n     # now map initial y to Y so that the patterns never treat it as vowel:\n     $w =~ /^./; $firstch = $&;\n     if ($firstch =~ /^y/) { $w = ucfirst $w; }\n     \n     # Step 1a\n     if ($w =~ /(ss|i)es$/) { $w=$`.$1; }\n     elsif ($w =~ /([^s])s$/) { $w=$`.$1; }\n     # Step 1b\n     if ($w =~ /eed$/) { if ($` =~ /$mgr0/o) { chop($w); } }\n     elsif ($w =~ /(ed|ing)$/)\n       {  $stem = $`;\n\t  if ($stem =~ /$_v/o)\n\t    {  $w = $stem;\n\t       if ($w =~ /(at|bl|iz)$/) { $w .= \"e\"; }\n\t       elsif ($w =~ /([^aeiouylsz])\\1$/) { chop($w); }\n\t       elsif ($w =~ /^${C}${v}[^aeiouwxy]$/o) { $w .= \"e\"; }\n   }\n}\n# Step 1c\n  if ($w =~ /y$/) { $stem = $`; if ($stem =~ /$_v/o) { $w = $stem.\"i\"; } }\n\n# Step 2\nif ($w =~ /(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/)\n  { $stem = $`; $suffix = $1;\n    if ($stem =~ /$mgr0/o) { $w = $stem . $step2list{$suffix}; }\n  }\n\n# Step 3\n\nif ($w =~ /(icate|ative|alize|iciti|ical|ful|ness)$/)\n  { $stem = $`; $suffix = $1;\n    if ($stem =~ /$mgr0/o) { $w = $stem . $step3list{$suffix}; }\n  }\n\n# Step 4\n\n   # CYL: Modified 02/14/2004, a word ended in -ement will not try the rules \"-ment\" and \"-ent\"\n#   if ($w =~ /(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/)\n#   elsif ($w =~ /(s|t)(ion)$/)\n#   { $stem = $` . $1; if ($stem =~ /$mgr1/o) { $w = $stem; } }\n   if ($w =~ /(al|ance|ence|er|ic|able|ible|ant|ement|ou|ism|ate|iti|ous|ive|ize)$/)\n   { $stem = $`; if ($stem =~ /$mgr1/o) { $w = $stem; } }\n   if ($w =~ /ment$/)\n   { $stem = $`; if ($stem =~ /$mgr1/o) { $w = $stem; } }\n   if ($w =~ /ent$/)\n   { $stem = $`; if ($stem =~ /$mgr1/o) { $w = $stem; } }\n   elsif ($w =~ /(s|t)(ion)$/)\n   { $stem = $` . $1; if ($stem =~ /$mgr1/o) { $w = $stem; } }\n\n#  Step 5\n\nif ($w =~ /e$/)\n  { $stem = $`;\n    if ($stem =~ /$mgr1/o or\n\t($stem =~ /$meq1/o and not $stem =~ /^${C}${v}[^aeiouwxy]$/o))\n{ $w = $stem; }\n}\nif ($w =~ /ll$/ and $w =~ /$mgr1/o) { chop($w); }\n\n# and turn initial Y back to y\nif ($firstch =~ /^y/) { $w = lcfirst $w; }\nreturn $w;\n}\n\n  sub initialise {\n    \n    %step2list =\n      ( 'ational'=>'ate', 'tional'=>'tion', 'enci'=>'ence', 'anci'=>'ance', 'izer'=>'ize', 'bli'=>'ble',\n\t'alli'=>'al', 'entli'=>'ent', 'eli'=>'e', 'ousli'=>'ous', 'ization'=>'ize', 'ation'=>'ate',\n\t'ator'=>'ate', 'alism'=>'al', 'iveness'=>'ive', 'fulness'=>'ful', 'ousness'=>'ous', 'aliti'=>'al',\n\t'iviti'=>'ive', 'biliti'=>'ble', 'logi'=>'log');\n    \n    %step3list =\n      ('icate'=>'ic', 'ative'=>'', 'alize'=>'al', 'iciti'=>'ic', 'ical'=>'ic', 'ful'=>'', 'ness'=>'');\n    \n    \n    $c =    \"[^aeiou]\";          # consonant\n    $v =    \"[aeiouy]\";          # vowel\n    $C =    \"${c}[^aeiouy]*\";    # consonant sequence\n    $V =    \"${v}[aeiou]*\";      # vowel sequence\n    \n    $mgr0 = \"^(${C})?${V}${C}\";               # [C]VC... is m>0\n    $meq1 = \"^(${C})?${V}${C}(${V})?\" . '$';  # [C]VC[V] is m=1\n   $mgr1 = \"^(${C})?${V}${C}${V}${C}\";       # [C]VCVC... is m>1\n   $_v   = \"^(${C})?${v}\";                   # vowel in stem\n\n}\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/AttDef.pod",
    "content": "=head1 NAME\n\nXML::DOM::AttDef - A single XML attribute definition in an ATTLIST in XML::DOM \n\n=head1 DESCRIPTION\n\nXML::DOM::AttDef extends L<XML::DOM::Node>, but is not part of the DOM Level 1\nspecification.\n\nEach object of this class represents one attribute definition in an AttlistDecl.\n\n=head2 METHODS\n\n=over 4\n\n=item getName\n\nReturns the attribute name.\n\n=item getDefault\n\nReturns the default value, or undef.\n\n=item isFixed\n\nWhether the attribute value is fixed (see #FIXED keyword.)\n\n=item isRequired\n\nWhether the attribute value is required (see #REQUIRED keyword.)\n\n=item isImplied\n\nWhether the attribute value is implied (see #IMPLIED keyword.)\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/AttlistDecl.pod",
    "content": "=head1 NAME\n\nXML::DOM::AttlistDecl - An XML ATTLIST declaration in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::AttlistDecl extends L<XML::DOM::Node> but is not part of the \nDOM Level 1 specification.\n\nThis node represents an ATTLIST declaration, e.g.\n\n <!ATTLIST person\n   sex      (male|female)  #REQUIRED\n   hair     CDATA          \"bold\"\n   eyes     (none|one|two) \"two\"\n   species  (human)        #FIXED \"human\"> \n\nEach attribute definition is stored a separate AttDef node. The AttDef nodes can\nbe retrieved with getAttDef and added with addAttDef.\n(The AttDef nodes are stored in a NamedNodeMap internally.)\n\n=head2 METHODS\n\n=over 4\n\n=item getName\n\nReturns the Element tagName.\n\n=item getAttDef (attrName)\n\nReturns the AttDef node for the attribute with the specified name.\n\n=item addAttDef (attrName, type, default, [ fixed ])\n\nAdds a AttDef node for the attribute with the specified name.\n\nParameters:\n I<attrName> the attribute name.\n I<type>     the attribute type (e.g. \"CDATA\" or \"(male|female)\".)\n I<default>  the default value enclosed in quotes (!), the string #IMPLIED or \n             the string #REQUIRED.\n I<fixed>    whether the attribute is '#FIXED' (default is 0.)\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Attr.pod",
    "content": "=head1 NAME\n\nXML::DOM::Attr - An XML attribute in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Attr extends L<XML::DOM::Node>.\n\nThe Attr nodes built by the XML::DOM::Parser always have one child node\nwhich is a Text node containing the expanded string value (i.e. EntityReferences\nare always expanded.) EntityReferences may be added when modifying or creating\na new Document.\n\nThe Attr interface represents an attribute in an Element object.\nTypically the allowable values for the attribute are defined in a\ndocument type definition.\n\nAttr objects inherit the Node interface, but since they are not\nactually child nodes of the element they describe, the DOM does not\nconsider them part of the document tree. Thus, the Node attributes\nparentNode, previousSibling, and nextSibling have a undef value for Attr\nobjects. The DOM takes the view that attributes are properties of\nelements rather than having a separate identity from the elements they\nare associated with; this should make it more efficient to implement\nsuch features as default attributes associated with all elements of a\ngiven type. Furthermore, Attr nodes may not be immediate children of a\nDocumentFragment. However, they can be associated with Element nodes\ncontained within a DocumentFragment. In short, users and implementors\nof the DOM need to be aware that Attr nodes have some things in common\nwith other objects inheriting the Node interface, but they also are\nquite distinct.\n\nThe attribute's effective value is determined as follows: if this\nattribute has been explicitly assigned any value, that value is the\nattribute's effective value; otherwise, if there is a declaration for\nthis attribute, and that declaration includes a default value, then\nthat default value is the attribute's effective value; otherwise, the\nattribute does not exist on this element in the structure model until\nit has been explicitly added. Note that the nodeValue attribute on the\nAttr instance can also be used to retrieve the string version of the\nattribute's value(s).\n\nIn XML, where the value of an attribute can contain entity references,\nthe child nodes of the Attr node provide a representation in which\nentity references are not expanded. These child nodes may be either\nText or EntityReference nodes. Because the attribute type may be\nunknown, there are no tokenized attribute values.\n\n=head2 METHODS\n\n=over 4\n\n=item getValue\n\nOn retrieval, the value of the attribute is returned as a string. \nCharacter and general entity references are replaced with their values.\n\n=item setValue (str)\n\nDOM Spec: On setting, this creates a Text node with the unparsed contents of the \nstring.\n\n=item getName\n\nReturns the name of this attribute.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/CDATASection.pod",
    "content": "=head1 NAME\n\nXML::DOM::CDATASection - Escaping XML text blocks in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::CDATASection extends L<XML::DOM::CharacterData> which extends\nL<XML::DOM::Node>.\n\nCDATA sections are used to escape blocks of text containing characters\nthat would otherwise be regarded as markup. The only delimiter that is\nrecognized in a CDATA section is the \"]]>\" string that ends the CDATA\nsection. CDATA sections can not be nested. The primary purpose is for\nincluding material such as XML fragments, without needing to escape all\nthe delimiters.\n\nThe DOMString attribute of the Text node holds the text that is\ncontained by the CDATA section. Note that this may contain characters\nthat need to be escaped outside of CDATA sections and that, depending\non the character encoding (\"charset\") chosen for serialization, it may\nbe impossible to write out some characters as part of a CDATA section.\n\nThe CDATASection interface inherits the CharacterData interface through\nthe Text interface. Adjacent CDATASections nodes are not merged by use\nof the Element.normalize() method.\n\nB<NOTE:> XML::DOM::Parser and XML::DOM::ValParser convert all CDATASections \nto regular text by default.\nTo preserve CDATASections, set the parser option KeepCDATA to 1.\n\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/CharacterData.pod",
    "content": "=head1 NAME\n\nXML::DOM::CharacterData - Common interface for Text, CDATASections and Comments\n\n=head1 DESCRIPTION\n\nXML::DOM::CharacterData extends L<XML::DOM::Node>\n\nThe CharacterData interface extends Node with a set of attributes and\nmethods for accessing character data in the DOM. For clarity this set\nis defined here rather than on each object that uses these attributes\nand methods. No DOM objects correspond directly to CharacterData,\nthough Text, Comment and CDATASection do inherit the interface from it. \nAll offsets in this interface start from 0.\n\n=head2 METHODS\n\n=over 4\n\n=item getData and setData (data)\n\nThe character data of the node that implements this\ninterface. The DOM implementation may not put arbitrary\nlimits on the amount of data that may be stored in a\nCharacterData node. However, implementation limits may mean\nthat the entirety of a node's data may not fit into a single\nDOMString. In such cases, the user may call substringData to\nretrieve the data in appropriately sized pieces.\n\n=item getLength\n\nThe number of characters that are available through data and\nthe substringData method below. This may have the value zero,\ni.e., CharacterData nodes may be empty.\n\n=item substringData (offset, count)\n\nExtracts a range of data from the node.\n\nParameters:\n I<offset>  Start offset of substring to extract.\n I<count>   The number of characters to extract.\n\nReturn Value: The specified substring. If the sum of offset and count\nexceeds the length, then all characters to the end of\nthe data are returned.\n\n=item appendData (str)\n\nAppends the string to the end of the character data of the\nnode. Upon success, data provides access to the concatenation\nof data and the DOMString specified.\n\n=item insertData (offset, arg)\n\nInserts a string at the specified character offset.\n\nParameters:\n I<offset>  The character offset at which to insert.\n I<arg>     The DOMString to insert.\n\n=item deleteData (offset, count)\n\nRemoves a range of characters from the node. \nUpon success, data and length reflect the change.\nIf the sum of offset and count exceeds length then all characters \nfrom offset to the end of the data are deleted.\n\nParameters: \n I<offset>  The offset from which to remove characters. \n I<count>   The number of characters to delete. \n\n=item replaceData (offset, count, arg)\n\nReplaces the characters starting at the specified character\noffset with the specified string.\n\nParameters:\n I<offset>  The offset from which to start replacing.\n I<count>   The number of characters to replace. \n I<arg>     The DOMString with which the range must be replaced.\n\nIf the sum of offset and count exceeds length, then all characters to the end of\nthe data are replaced (i.e., the effect is the same as a remove method call with \nthe same range, followed by an append method invocation).\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Comment.pod",
    "content": "=head1 NAME\n\nXML::DOM::Comment - An XML comment in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Comment extends L<XML::DOM::CharacterData> which extends \nL<XML::DOM::Node>.\n\nThis node represents the content of a comment, i.e., all the characters\nbetween the starting '<!--' and ending '-->'. Note that this is the\ndefinition of a comment in XML, and, in practice, HTML, although some\nHTML tools may implement the full SGML comment structure.\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/DOMException.pm",
    "content": "######################################################################\npackage XML::DOM::DOMException;\n######################################################################\n\nuse Exporter;\n\nuse overload '\"\"' => \\&stringify;\nuse vars qw ( @ISA @EXPORT @ErrorNames );\n\nBEGIN\n{\n  @ISA = qw( Exporter );\n  @EXPORT = qw( INDEX_SIZE_ERR\n\t\tDOMSTRING_SIZE_ERR\n\t\tHIERARCHY_REQUEST_ERR\n\t\tWRONG_DOCUMENT_ERR\n\t\tINVALID_CHARACTER_ERR\n\t\tNO_DATA_ALLOWED_ERR\n\t\tNO_MODIFICATION_ALLOWED_ERR\n\t\tNOT_FOUND_ERR\n\t\tNOT_SUPPORTED_ERR\n\t\tINUSE_ATTRIBUTE_ERR\n\t      );\n}\n\nsub UNKNOWN_ERR\t\t\t() {0;}\t# not in the DOM Spec!\nsub INDEX_SIZE_ERR\t\t() {1;}\nsub DOMSTRING_SIZE_ERR\t\t() {2;}\nsub HIERARCHY_REQUEST_ERR\t() {3;}\nsub WRONG_DOCUMENT_ERR\t\t() {4;}\nsub INVALID_CHARACTER_ERR\t() {5;}\nsub NO_DATA_ALLOWED_ERR\t\t() {6;}\nsub NO_MODIFICATION_ALLOWED_ERR\t() {7;}\nsub NOT_FOUND_ERR\t\t() {8;}\nsub NOT_SUPPORTED_ERR\t\t() {9;}\nsub INUSE_ATTRIBUTE_ERR\t\t() {10;}\n\n@ErrorNames = (\n\t       \"UNKNOWN_ERR\",\n\t       \"INDEX_SIZE_ERR\",\n\t       \"DOMSTRING_SIZE_ERR\",\n\t       \"HIERARCHY_REQUEST_ERR\",\n\t       \"WRONG_DOCUMENT_ERR\",\n\t       \"INVALID_CHARACTER_ERR\",\n\t       \"NO_DATA_ALLOWED_ERR\",\n\t       \"NO_MODIFICATION_ALLOWED_ERR\",\n\t       \"NOT_FOUND_ERR\",\n\t       \"NOT_SUPPORTED_ERR\",\n\t       \"INUSE_ATTRIBUTE_ERR\"\n\t      );\nsub new\n{\n    my ($type, $code, $msg) = @_;\n    my $self = bless {Code => $code}, $type;\n\n    $self->{Message} = $msg if defined $msg;\n\n#    print \"=> Exception: \" . $self->stringify . \"\\n\"; \n    $self;\n}\n\nsub getCode\n{\n    $_[0]->{Code};\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub getName\n{\n    $ErrorNames[$_[0]->{Code}];\n}\n\nsub getMessage\n{\n    $_[0]->{Message};\n}\n\nsub stringify\n{\n    my $self = shift;\n\n    \"XML::DOM::DOMException(Code=\" . $self->getCode . \", Name=\" .\n\t$self->getName . \", Message=\" . $self->getMessage . \")\";\n}\n\n1; # package return code\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/DOMImplementation.pod",
    "content": "=head1 NAME\n\nXML::DOM::DOMImplementation - Information about XML::DOM implementation\n\n=head1 DESCRIPTION\n\nThe DOMImplementation interface provides a number of methods for\nperforming operations that are independent of any particular instance\nof the document object model.\n\nThe DOM Level 1 does not specify a way of creating a document instance,\nand hence document creation is an operation specific to an\nimplementation. Future Levels of the DOM specification are expected to\nprovide methods for creating documents directly.\n\n=head2 METHODS\n\n=over 4\n\n=item hasFeature (feature, version)\n\nReturns 1 if and only if feature equals \"XML\" and version equals \"1.0\".\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Document.pod",
    "content": "=head1 NAME\n\nXML::DOM::Document - An XML document node in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Document extends L<XML::DOM::Node>.\n\nIt is the main root of the XML document structure as returned by \nXML::DOM::Parser::parse and XML::DOM::Parser::parsefile.\n\nSince elements, text nodes, comments, processing instructions, etc.\ncannot exist outside the context of a Document, the Document interface\nalso contains the factory methods needed to create these objects. The\nNode objects created have a getOwnerDocument method which associates\nthem with the Document within whose context they were created.\n\n=head2 METHODS\n\n=over 4\n\n=item getDocumentElement\n\nThis is a convenience method that allows direct access to\nthe child node that is the root Element of the document.\n\n=item getDoctype\n\nThe Document Type Declaration (see DocumentType) associated\nwith this document. For HTML documents as well as XML\ndocuments without a document type declaration this returns\nundef. The DOM Level 1 does not support editing the Document\nType Declaration.\n\nB<Not In DOM Spec>: This implementation allows editing the doctype. \nSee I<XML::DOM::ignoreReadOnly> for details.\n\n=item getImplementation\n\nThe DOMImplementation object that handles this document. A\nDOM application may use objects from multiple implementations.\n\n=item createElement (tagName)\n\nCreates an element of the type specified. Note that the\ninstance returned implements the Element interface, so\nattributes can be specified directly on the returned object.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the tagName does not conform to the XML spec.\n\n=back\n\n=item createTextNode (data)\n\nCreates a Text node given the specified string.\n\n=item createComment (data)\n\nCreates a Comment node given the specified string.\n\n=item createCDATASection (data)\n\nCreates a CDATASection node given the specified string.\n\n=item createAttribute (name [, value [, specified ]])\n\nCreates an Attr of the given name. Note that the Attr\ninstance can then be set on an Element using the setAttribute method.\n\nB<Not In DOM Spec>: The DOM Spec does not allow passing the value or the \nspecified property in this method. In this implementation they are optional.\n\nParameters:\n I<value>     The attribute's value. See Attr::setValue for details.\n              If the value is not supplied, the specified property is set to 0.\n I<specified> Whether the attribute value was specified or whether the default\n              value was used. If not supplied, it's assumed to be 1.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the name does not conform to the XML spec.\n\n=back\n\n=item createProcessingInstruction (target, data)\n\nCreates a ProcessingInstruction node given the specified name and data strings.\n\nParameters:\n I<target>  The target part of the processing instruction.\n I<data>    The data for the node.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the target does not conform to the XML spec.\n\n=back\n\n=item createDocumentFragment\n\nCreates an empty DocumentFragment object.\n\n=item createEntityReference (name)\n\nCreates an EntityReference object.\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item getXMLDecl and setXMLDecl (xmlDecl)\n\nReturns the XMLDecl for this Document or undef if none was specified.\nNote that XMLDecl is not part of the list of child nodes.\n\n=item setDoctype (doctype)\n\nSets or replaces the DocumentType. \nB<NOTE>: Don't use appendChild or insertBefore to set the DocumentType.\nEven though doctype will be part of the list of child nodes, it is handled\nspecially.\n\n=item getDefaultAttrValue (elem, attr)\n\nReturns the default attribute value as a string or undef, if none is available.\n\nParameters:\n I<elem>    The element tagName.\n I<attr>    The attribute name.\n\n=item getEntity (name)\n\nReturns the Entity with the specified name.\n\n=item createXMLDecl (version, encoding, standalone)\n\nCreates an XMLDecl object. All parameters may be undefined.\n\n=item createDocumentType (name, sysId, pubId)\n\nCreates a DocumentType object. SysId and pubId may be undefined.\n\n=item createNotation (name, base, sysId, pubId)\n\nCreates a new Notation object. Consider using \nXML::DOM::DocumentType::addNotation!\n\n=item createEntity (parameter, notationName, value, sysId, pubId, ndata)\n\nCreates an Entity object. Consider using XML::DOM::DocumentType::addEntity!\n\n=item createElementDecl (name, model)\n\nCreates an ElementDecl object.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the element name (tagName) does not conform to the XML spec.\n\n=back\n\n=item createAttlistDecl (name)\n\nCreates an AttlistDecl object.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the element name (tagName) does not conform to the XML spec.\n\n=back\n\n=item expandEntity (entity [, parameter])\n\nExpands the specified entity or parameter entity (if parameter=1) and returns\nits value as a string, or undef if the entity does not exist.\n(The entity name should not contain the '%', '&' or ';' delimiters.)\n\n=item check ( [$checker] )\n\nUses the specified L<XML::Checker> to validate the document.\nIf no XML::Checker is supplied, a new XML::Checker is created.\nSee L<XML::Checker> for details.\n\n=item check_sax ( [$checker] )\n\nSimilar to check() except it uses the SAX interface to XML::Checker instead of \nthe expat interface. This method may disappear or replace check() at some time.\n\n=item createChecker ()\n\nCreates an XML::Checker based on the document's DTD.\nThe $checker can be reused to check any elements within the document.\nCreate a new L<XML::Checker> whenever the DOCTYPE section of the document \nis altered!\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/DocumentFragment.pod",
    "content": "=head1 NAME\n\nXML::DOM::DocumentFragment - Facilitates cut & paste in XML::DOM documents\n\n=head1 DESCRIPTION\n\nXML::DOM::DocumentFragment extends L<XML::DOM::Node>\n\nDocumentFragment is a \"lightweight\" or \"minimal\" Document object. It is\nvery common to want to be able to extract a portion of a document's\ntree or to create a new fragment of a document. Imagine implementing a\nuser command like cut or rearranging a document by moving fragments\naround. It is desirable to have an object which can hold such fragments\nand it is quite natural to use a Node for this purpose. While it is\ntrue that a Document object could fulfil this role, a Document object\ncan potentially be a heavyweight object, depending on the underlying\nimplementation. What is really needed for this is a very lightweight\nobject. DocumentFragment is such an object.\n\nFurthermore, various operations -- such as inserting nodes as children\nof another Node -- may take DocumentFragment objects as arguments; this\nresults in all the child nodes of the DocumentFragment being moved to\nthe child list of this node.\n\nThe children of a DocumentFragment node are zero or more nodes\nrepresenting the tops of any sub-trees defining the structure of the\ndocument. DocumentFragment nodes do not need to be well-formed XML\ndocuments (although they do need to follow the rules imposed upon\nwell-formed XML parsed entities, which can have multiple top nodes).\nFor example, a DocumentFragment might have only one child and that\nchild node could be a Text node. Such a structure model represents\nneither an HTML document nor a well-formed XML document.\n\nWhen a DocumentFragment is inserted into a Document (or indeed any\nother Node that may take children) the children of the DocumentFragment\nand not the DocumentFragment itself are inserted into the Node. This\nmakes the DocumentFragment very useful when the user wishes to create\nnodes that are siblings; the DocumentFragment acts as the parent of\nthese nodes so that the user can use the standard methods from the Node\ninterface, such as insertBefore() and appendChild().\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/DocumentType.pod",
    "content": "=head1 NAME\n\nXML::DOM::DocumentType - An XML document type (DTD) in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::DocumentType extends L<XML::DOM::Node>.\n\nEach Document has a doctype attribute whose value is either null or a\nDocumentType object. The DocumentType interface in the DOM Level 1 Core\nprovides an interface to the list of entities that are defined for the\ndocument, and little else because the effect of namespaces and the\nvarious XML scheme efforts on DTD representation are not clearly\nunderstood as of this writing. \nThe DOM Level 1 doesn't support editing DocumentType nodes.\n\nB<Not In DOM Spec>: This implementation has added a lot of extra \nfunctionality to the DOM Level 1 interface. \nTo allow editing of the DocumentType nodes, see XML::DOM::ignoreReadOnly.\n\n=head2 METHODS\n\n=over 4\n\n=item getName\n\nReturns the name of the DTD, i.e. the name immediately following the\nDOCTYPE keyword.\n\n=item getEntities\n\nA NamedNodeMap containing the general entities, both external\nand internal, declared in the DTD. Duplicates are discarded.\nFor example in:\n\n <!DOCTYPE ex SYSTEM \"ex.dtd\" [\n  <!ENTITY foo \"foo\">\n  <!ENTITY bar \"bar\">\n  <!ENTITY % baz \"baz\">\n ]>\n <ex/>\n\nthe interface provides access to foo and bar but not baz.\nEvery node in this map also implements the Entity interface.\n\nThe DOM Level 1 does not support editing entities, therefore\nentities cannot be altered in any way.\n\nB<Not In DOM Spec>: See XML::DOM::ignoreReadOnly to edit the DocumentType etc.\n\n=item getNotations\n\nA NamedNodeMap containing the notations declared in the DTD.\nDuplicates are discarded. Every node in this map also\nimplements the Notation interface.\n\nThe DOM Level 1 does not support editing notations, therefore\nnotations cannot be altered in any way.\n\nB<Not In DOM Spec>: See XML::DOM::ignoreReadOnly to edit the DocumentType etc.\n\n=head2 Additional methods not in the DOM Spec\n\n=item Creating and setting the DocumentType\n\nA new DocumentType can be created with:\n\n\t$doctype = $doc->createDocumentType ($name, $sysId, $pubId, $internal);\n\nTo set (or replace) the DocumentType for a particular document, use:\n\n\t$doc->setDocType ($doctype);\n\n=item getSysId and setSysId (sysId)\n\nReturns or sets the system id.\n\n=item getPubId and setPubId (pudId)\n\nReturns or sets the public id.\n\n=item setName (name)\n\nSets the name of the DTD, i.e. the name immediately following the\nDOCTYPE keyword. Note that this should always be the same as the element\ntag name of the root element.\n\n=item getAttlistDecl (elemName)\n\nReturns the AttlistDecl for the Element with the specified name, or undef.\n\n=item getElementDecl (elemName)\n\nReturns the ElementDecl for the Element with the specified name, or undef.\n\n=item getEntity (entityName)\n\nReturns the Entity with the specified name, or undef.\n\n=item addAttlistDecl (elemName)\n\nAdds a new AttDecl node with the specified elemName if one doesn't exist yet.\nReturns the AttlistDecl (new or existing) node.\n\n=item addElementDecl (elemName, model)\n\nAdds a new ElementDecl node with the specified elemName and model if one doesn't \nexist yet.\nReturns the AttlistDecl (new or existing) node. The model is ignored if one\nalready existed.\n\n=item addEntity (notationName, value, sysId, pubId, ndata, parameter)\n\nAdds a new Entity node. Don't use createEntity and appendChild, because it should\nbe added to the internal NamedNodeMap containing the entities.\n\nParameters:\n I<notationName> the entity name.\n I<value>        the entity value.\n I<sysId>        the system id (if any.)\n I<pubId>        the public id (if any.)\n I<ndata>        the NDATA declaration (if any, for general unparsed entities.)\n I<parameter>\t whether it is a parameter entity (%ent;) or not (&ent;).\n\nSysId, pubId and ndata may be undefined.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the notationName does not conform to the XML spec.\n\n=back\n\n=item addNotation (name, base, sysId, pubId)\n\nAdds a new Notation object. \n\nParameters:\n I<name>   the notation name.\n I<base>   the base to be used for resolving a relative URI.\n I<sysId>  the system id.\n I<pubId>  the public id.\n\nBase, sysId, and pubId may all be undefined.\n(These parameters are passed by the XML::Parser Notation handler.)\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the notationName does not conform to the XML spec.\n\n=back\n\n=item addAttDef (elemName, attrName, type, default, fixed)\n\nAdds a new attribute definition. It will add the AttDef node to the AttlistDecl\nif it exists. If an AttDef with the specified attrName already exists for the\ngiven elemName, this function only generates a warning.\n\nSee XML::DOM::AttDef::new for the other parameters.\n\n=item getDefaultAttrValue (elem, attr)\n\nReturns the default attribute value as a string or undef, if none is available.\n\nParameters:\n I<elem>    The element tagName.\n I<attr>    The attribute name.\n\n=item expandEntity (entity [, parameter])\n\nExpands the specified entity or parameter entity (if parameter=1) and returns\nits value as a string, or undef if the entity does not exist.\n(The entity name should not contain the '%', '&' or ';' delimiters.)\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Element.pod",
    "content": "=head1 NAME\n\nXML::DOM::Element - An XML element node in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Element extends L<XML::DOM::Node>.\n\nBy far the vast majority of objects (apart from text) that authors\nencounter when traversing a document are Element nodes. Assume the\nfollowing XML document:\n\n     <elementExample id=\"demo\">\n       <subelement1/>\n       <subelement2><subsubelement/></subelement2>\n     </elementExample>\n\nWhen represented using DOM, the top node is an Element node for\n\"elementExample\", which contains two child Element nodes, one for\n\"subelement1\" and one for \"subelement2\". \"subelement1\" contains no\nchild nodes.\n\nElements may have attributes associated with them; since the Element\ninterface inherits from Node, the generic Node interface method\ngetAttributes may be used to retrieve the set of all attributes for an\nelement. There are methods on the Element interface to retrieve either\nan Attr object by name or an attribute value by name. In XML, where an\nattribute value may contain entity references, an Attr object should be\nretrieved to examine the possibly fairly complex sub-tree representing\nthe attribute value. On the other hand, in HTML, where all attributes\nhave simple string values, methods to directly access an attribute\nvalue can safely be used as a convenience.\n\n=head2 METHODS\n\n=over 4\n\n=item getTagName\n\nThe name of the element. For example, in:\n\n               <elementExample id=\"demo\">\n                       ...\n               </elementExample>\n\ntagName has the value \"elementExample\". Note that this is\ncase-preserving in XML, as are all of the operations of the\nDOM.\n\n=item getAttribute (name)\n\nRetrieves an attribute value by name.\n\nReturn Value: The Attr value as a string, or the empty string if that\nattribute does not have a specified or default value.\n\n=item setAttribute (name, value)\n\nAdds a new attribute. If an attribute with that name is\nalready present in the element, its value is changed to be\nthat of the value parameter. This value is a simple string,\nit is not parsed as it is being set. So any markup (such as\nsyntax to be recognized as an entity reference) is treated as\nliteral text, and needs to be appropriately escaped by the\nimplementation when it is written out. In order to assign an\nattribute value that contains entity references, the user\nmust create an Attr node plus any Text and EntityReference\nnodes, build the appropriate subtree, and use\nsetAttributeNode to assign it as the value of an attribute.\n\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the specified name contains an invalid character.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=back\n\n=item removeAttribute (name)\n\nRemoves an attribute by name. If the removed attribute has a\ndefault value it is immediately replaced.\n\nDOMExceptions:\n\n=over 4\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=back\n\n=item getAttributeNode\n\nRetrieves an Attr node by name.\n\nReturn Value: The Attr node with the specified attribute name or undef\nif there is no such attribute.\n\n=item setAttributeNode (attr)\n\nAdds a new attribute. If an attribute with that name is\nalready present in the element, it is replaced by the new one.\n\nReturn Value: If the newAttr attribute replaces an existing attribute\nwith the same name, the previously existing Attr node is\nreturned, otherwise undef is returned.\n\nDOMExceptions:\n\n=over 4\n\n=item * WRONG_DOCUMENT_ERR\n\nRaised if newAttr was created from a different document than the one that created\nthe element.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=item * INUSE_ATTRIBUTE_ERR\n\nRaised if newAttr is already an attribute of another Element object. The DOM\nuser must explicitly clone Attr nodes to re-use them in other elements.\n\n=back\n\n=item removeAttributeNode (oldAttr)\n\nRemoves the specified attribute. If the removed Attr has a default value it is\nimmediately replaced. If the Attr already is the default value, nothing happens\nand nothing is returned.\n\nParameters:\n I<oldAttr>  The Attr node to remove from the attribute list. \n\nReturn Value: The Attr node that was removed.\n\nDOMExceptions:\n\n=over 4\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=item * NOT_FOUND_ERR\n\nRaised if oldAttr is not an attribute of the element.\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item setTagName (newTagName)\n\nSets the tag name of the Element. Note that this method is not portable\nbetween DOM implementations.\n\nDOMExceptions:\n\n=over 4\n\n=item * INVALID_CHARACTER_ERR\n\nRaised if the specified name contains an invalid character.\n\n=back\n\n=item check ($checker)\n\nUses the specified L<XML::Checker> to validate the document.\nNOTE: an XML::Checker must be supplied. The checker can be created in\ndifferent ways, e.g. when parsing a document with XML::DOM::ValParser,\nor with XML::DOM::Document::createChecker().\nSee L<XML::Checker> for more info.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/ElementDecl.pod",
    "content": "=head1 NAME\n\nXML::DOM::ElementDecl - An XML ELEMENT declaration in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::ElementDecl extends L<XML::DOM::Node> but is not part of the \nDOM Level 1 specification.\n\nThis node represents an Element declaration, e.g.\n\n <!ELEMENT address (street+, city, state, zip, country?)>\n\n=head2 METHODS\n\n=over 4\n\n=item getName\n\nReturns the Element tagName.\n\n=item getModel and setModel (model)\n\nReturns and sets the model as a string, e.g. \n\"(street+, city, state, zip, country?)\" in the above example.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Entity.pod",
    "content": "=head1 NAME\n\nXML::DOM::Entity - An XML ENTITY in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Entity extends L<XML::DOM::Node>.\n\nThis node represents an Entity declaration, e.g.\n\n <!ENTITY % draft 'INCLUDE'>\n\n <!ENTITY hatch-pic SYSTEM \"../grafix/OpenHatch.gif\" NDATA gif>\n\nThe first one is called a parameter entity and is referenced like this: %draft;\nThe 2nd is a (regular) entity and is referenced like this: &hatch-pic;\n\n=head2 METHODS\n\n=over 4\n\n=item getNotationName\n\nReturns the name of the notation for the entity.\n\nI<Not Implemented> The DOM Spec says: For unparsed entities, the name of the \nnotation for the entity. For parsed entities, this is null.\n(This implementation does not support unparsed entities.)\n\n=item getSysId\n\nReturns the system id, or undef.\n\n=item getPubId\n\nReturns the public id, or undef.\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item isParameterEntity\n\nWhether it is a parameter entity (%ent;) or not (&ent;)\n\n=item getValue\n\nReturns the entity value.\n\n=item getNdata\n\nReturns the NDATA declaration (for general unparsed entities), or undef.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/EntityReference.pod",
    "content": "=head1 NAME\n\nXML::DOM::EntityReference - An XML ENTITY reference in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::EntityReference extends L<XML::DOM::Node>.\n\nEntityReference objects may be inserted into the structure model when\nan entity reference is in the source document, or when the user wishes\nto insert an entity reference. Note that character references and\nreferences to predefined entities are considered to be expanded by the\nHTML or XML processor so that characters are represented by their\nUnicode equivalent rather than by an entity reference. Moreover, the\nXML processor may completely expand references to entities while\nbuilding the structure model, instead of providing EntityReference\nobjects. If it does provide such objects, then for a given\nEntityReference node, it may be that there is no Entity node\nrepresenting the referenced entity; but if such an Entity exists, then\nthe child list of the EntityReference node is the same as that of the\nEntity node. As with the Entity node, all descendants of the\nEntityReference are readonly.\n\nThe resolution of the children of the EntityReference (the replacement\nvalue of the referenced Entity) may be lazily evaluated; actions by the\nuser (such as calling the childNodes method on the EntityReference\nnode) are assumed to trigger the evaluation.\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/NamedNodeMap.pm",
    "content": "######################################################################\npackage XML::DOM::NamedNodeMap;\n######################################################################\n\nuse strict;\n\nuse Carp;\nuse XML::DOM::DOMException;\nuse XML::DOM::NodeList;\n\nuse vars qw( $Special );\n\n# Constant definition:\n# Note: a real Name should have at least 1 char, so nobody else should use this\n$Special = \"\";\n\nsub new \n{\n    my ($class, %args) = @_;\n\n    $args{Values} = new XML::DOM::NodeList;\n\n    # Store all NamedNodeMap properties in element $Special\n    bless { $Special => \\%args}, $class;\n}\n\nsub getNamedItem \n{\n    # Don't return the $Special item!\n    ($_[1] eq $Special) ? undef : $_[0]->{$_[1]};\n}\n\nsub setNamedItem \n{\n    my ($self, $node) = @_;\n    my $prop = $self->{$Special};\n\n    my $name = $node->getNodeName;\n\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)\n\t    if $self->isReadOnly;\n\n\tcroak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR)\n\t    if $node->[XML::DOM::Node::_Doc] != $prop->{Doc};\n\n\tcroak new XML::DOM::DOMException (INUSE_ATTRIBUTE_ERR)\n\t    if defined ($node->[XML::DOM::Node::_UsedIn]);\n\n\tcroak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,\n\t\t      \"can't add name with NodeName [$name] to NamedNodeMap\")\n\t    if $name eq $Special;\n    }\n\n    my $values = $prop->{Values};\n    my $index = -1;\n\n    my $prev = $self->{$name};\n    if (defined $prev)\n    {\n\t# decouple previous node\n\t$prev->decoupleUsedIn;\n\n\t# find index of $prev\n\t$index = 0;\n\tfor my $val (@{$values})\n\t{\n\t    last if ($val == $prev);\n\t    $index++;\n\t}\n    }\n\n    $self->{$name} = $node;    \n    $node->[XML::DOM::Node::_UsedIn] = $self;\n\n    if ($index == -1)\n    {\n\tpush (@{$values}, $node);\n    }\n    else\t# replace previous node with new node\n    {\n\tsplice (@{$values}, $index, 1, $node);\n    }\n    \n    $prev;\n}\n\nsub removeNamedItem \n{\n    my ($self, $name) = @_;\n\n    # Be careful that user doesn't delete $Special node!\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR)\n        if $name eq $Special;\n\n    my $node = $self->{$name};\n\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR)\n        unless defined $node;\n\n    # The DOM Spec doesn't mention this Exception - I think it's an oversight\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)\n\tif $self->isReadOnly;\n\n    $node->decoupleUsedIn;\n    delete $self->{$name};\n\n    # remove node from Values list\n    my $values = $self->getValues;\n    my $index = 0;\n    for my $val (@{$values})\n    {\n\tif ($val == $node)\n\t{\n\t    splice (@{$values}, $index, 1, ());\n\t    last;\n\t}\n\t$index++;\n    }\n    $node;\n}\n\n# The following 2 are really bogus. DOM should use an iterator instead (Clark)\n\nsub item \n{\n    my ($self, $item) = @_;\n    $self->{$Special}->{Values}->[$item];\n}\n\nsub getLength \n{\n    my ($self) = @_;\n    my $vals = $self->{$Special}->{Values};\n    int (@$vals);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    return 0 if $XML::DOM::IgnoreReadOnly;\n\n    my $used = $_[0]->{$Special}->{UsedIn};\n    defined $used ? $used->isReadOnly : 0;\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n    my $prop = $self->{$Special};\n\n    my $map = new XML::DOM::NamedNodeMap (Doc => $prop->{Doc});\n    # Not copying Parent property on purpose! \n\n    local $XML::DOM::IgnoreReadOnly = 1;\t# temporarily...\n\n    for my $val (@{$prop->{Values}})\n    {\n\tmy $key = $val->getNodeName;\n\n\tmy $newNode = $val->cloneNode ($deep);\n\t$newNode->[XML::DOM::Node::_UsedIn] = $map;\n\t$map->{$key} = $newNode;\n\tpush (@{$map->{$Special}->{Values}}, $newNode);\n    }\n\n    $map;\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    my $special = $self->{$Special};\n\n    $special->{Doc} = $doc;\n    for my $kid (@{$special->{Values}})\n    {\n\t$kid->setOwnerDocument ($doc);\n    }\n}\n\nsub getChildIndex\n{\n    my ($self, $attr) = @_;\n    my $i = 0;\n    for my $kid (@{$self->{$Special}->{Values}})\n    {\n\treturn $i if $kid == $attr;\n\t$i++;\n    }\n    -1;\t# not found\n}\n\nsub getValues\n{\n    wantarray ? @{ $_[0]->{$Special}->{Values} } : $_[0]->{$Special}->{Values};\n}\n\n# Remove circular dependencies. The NamedNodeMap and its values should\n# not be used afterwards.\nsub dispose\n{\n    my $self = shift;\n\n    for my $kid (@{$self->getValues})\n    {\n\tundef $kid->[XML::DOM::Node::_UsedIn]; # was delete\n\t$kid->dispose;\n    }\n\n    delete $self->{$Special}->{Doc};\n    delete $self->{$Special}->{Parent};\n    delete $self->{$Special}->{Values};\n\n    for my $key (keys %$self)\n    {\n\tdelete $self->{$key};\n    }\n}\n\nsub setParentNode\n{\n    $_[0]->{$Special}->{Parent} = $_[1];\n}\n\nsub getProperty\n{\n    $_[0]->{$Special}->{$_[1]};\n}\n\n#?? remove after debugging\nsub toString\n{\n    my ($self) = @_;\n    my $str = \"NamedNodeMap[\";\n    while (my ($key, $val) = each %$self)\n    {\n\tif ($key eq $Special)\n\t{\n\t    $str .= \"##Special (\";\n\t    while (my ($k, $v) = each %$val)\n\t    {\n\t\tif ($k eq \"Values\")\n\t\t{\n\t\t    $str .= $k . \" => [\";\n\t\t    for my $a (@$v)\n\t\t    {\n#\t\t\t$str .= $a->getNodeName . \"=\" . $a . \",\";\n\t\t\t$str .= $a->toString . \",\";\n\t\t    }\n\t\t    $str .= \"], \";\n\t\t}\n\t\telse\n\t\t{\n\t\t    $str .= $k . \" => \" . $v . \", \";\n\t\t}\n\t    }\n\t    $str .= \"), \";\n\t}\n\telse\n\t{\n\t    $str .= $key . \" => \" . $val . \", \";\n\t}\n    }\n    $str . \"]\";\n}\n\n1; # package return code\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/NamedNodeMap.pod",
    "content": "=head1 NAME\n\nXML::DOM::NamedNodeMap - A hash table interface for XML::DOM\n\n=head1 DESCRIPTION\n\nObjects implementing the NamedNodeMap interface are used to represent\ncollections of nodes that can be accessed by name. Note that\nNamedNodeMap does not inherit from NodeList; NamedNodeMaps are not\nmaintained in any particular order. Objects contained in an object\nimplementing NamedNodeMap may also be accessed by an ordinal index, but\nthis is simply to allow convenient enumeration of the contents of a\nNamedNodeMap, and does not imply that the DOM specifies an order to\nthese Nodes.\n\nNote that in this implementation, the objects added to a NamedNodeMap\nare kept in order.\n\n=head2 METHODS\n\n=over 4\n\n=item getNamedItem (name)\n\nRetrieves a node specified by name.\n\nReturn Value: A Node (of any type) with the specified name, or undef if\nthe specified name did not identify any node in the map.\n\n=item setNamedItem (arg)\n\nAdds a node using its nodeName attribute.\n\nAs the nodeName attribute is used to derive the name which\nthe node must be stored under, multiple nodes of certain\ntypes (those that have a \"special\" string value) cannot be\nstored as the names would clash. This is seen as preferable\nto allowing nodes to be aliased.\n\nParameters:\n I<arg>  A node to store in a named node map. \n\nThe node will later be accessible using the value of the nodeName\nattribute of the node. If a node with that name is\nalready present in the map, it is replaced by the new one.\n\nReturn Value: If the new Node replaces an existing node with the same\nname the previously existing Node is returned, otherwise undef is returned.\n\nDOMExceptions:\n\n=over 4\n\n=item * WRONG_DOCUMENT_ERR\n\nRaised if arg was created from a different document than the one that \ncreated the NamedNodeMap.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this NamedNodeMap is readonly.\n\n=item * INUSE_ATTRIBUTE_ERR\n\nRaised if arg is an Attr that is already an attribute of another Element object.\nThe DOM user must explicitly clone Attr nodes to re-use them in other elements.\n\n=back\n\n=item removeNamedItem (name)\n\nRemoves a node specified by name. If the removed node is an\nAttr with a default value it is immediately replaced.\n\nReturn Value: The node removed from the map or undef if no node with\nsuch a name exists.\n\nDOMException:\n\n=over 4\n\n=item * NOT_FOUND_ERR\n\nRaised if there is no node named name in the map.\n\n=back\n\n=item item (index)\n\nReturns the indexth item in the map. If index is greater than\nor equal to the number of nodes in the map, this returns undef.\n\nReturn Value: The node at the indexth position in the NamedNodeMap, or\nundef if that is not a valid index.\n\n=item getLength\n\nReturns the number of nodes in the map. The range of valid child node\nindices is 0 to length-1 inclusive.\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item getValues\n\nReturns a NodeList with the nodes contained in the NamedNodeMap.\nThe NodeList is \"live\", in that it reflects changes made to the NamedNodeMap.\n\nWhen this method is called in a list context, it returns a regular perl list\ncontaining the values. Note that this list is not \"live\". E.g.\n\n @list = $map->getValues;\t # returns a perl list\n $nodelist = $map->getValues;    # returns a NodeList (object ref.)\n for my $val ($map->getValues)   # iterate over the values\n\n=item getChildIndex (node)\n\nReturns the index of the node in the NodeList as returned by getValues, or -1\nif the node is not in the NamedNodeMap.\n\n=item dispose\n\nRemoves all circular references in this NamedNodeMap and its descendants so the \nobjects can be claimed for garbage collection. The objects should not be used\nafterwards.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Node.pod",
    "content": "=head1 NAME\n\nXML::DOM::Node - Super class of all nodes in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Node is the super class of all nodes in an XML::DOM document.\nThis means that all nodes that subclass XML::DOM::Node also inherit all\nthe methods that XML::DOM::Node implements.\n\n=head2 GLOBAL VARIABLES\n\n=over 4\n\n=item @NodeNames\n\nThe variable @XML::DOM::Node::NodeNames maps the node type constants to strings.\nIt is used by XML::DOM::Node::getNodeTypeName.\n\n=back\n\n=head2 METHODS\n\n=over 4\n\n=item getNodeType\n\nReturn an integer indicating the node type. See XML::DOM constants.\n\n=item getNodeName\n\nReturn a property or a hardcoded string, depending on the node type.\nHere are the corresponding functions or values:\n\n Attr\t\t\tgetName\n AttDef\t\t\tgetName\n AttlistDecl\t\tgetName\n CDATASection\t\t\"#cdata-section\"\n Comment\t\t\"#comment\"\n Document\t\t\"#document\"\n DocumentType\t\tgetNodeName\n DocumentFragment\t\"#document-fragment\"\n Element\t\tgetTagName\n ElementDecl\t\tgetName\n EntityReference\tgetEntityName\n Entity\t\t\tgetNotationName\n Notation\t\tgetName\n ProcessingInstruction\tgetTarget\n Text\t\t\t\"#text\"\n XMLDecl\t\t\"#xml-declaration\"\n\nB<Not In DOM Spec>: AttDef, AttlistDecl, ElementDecl and XMLDecl were added for\ncompleteness.\n\n=item getNodeValue and setNodeValue (value)\n\nReturns a string or undef, depending on the node type. This method is provided \nfor completeness. In other languages it saves the programmer an upcast.\nThe value is either available thru some other method defined in the subclass, or\nelse undef is returned. Here are the corresponding methods: \nAttr::getValue, Text::getData, CDATASection::getData, Comment::getData, \nProcessingInstruction::getData.\n\n=item getParentNode and setParentNode (parentNode)\n\nThe parent of this node. All nodes, except Document,\nDocumentFragment, and Attr may have a parent. However, if a\nnode has just been created and not yet added to the tree, or\nif it has been removed from the tree, this is undef.\n\n=item getChildNodes\n\nA NodeList that contains all children of this node. If there\nare no children, this is a NodeList containing no nodes. The\ncontent of the returned NodeList is \"live\" in the sense that,\nfor instance, changes to the children of the node object that\nit was created from are immediately reflected in the nodes\nreturned by the NodeList accessors; it is not a static\nsnapshot of the content of the node. This is true for every\nNodeList, including the ones returned by the\ngetElementsByTagName method.\n\nNOTE: this implementation does not return a \"live\" NodeList for\ngetElementsByTagName. See L<CAVEATS>.\n\nWhen this method is called in a list context, it returns a regular perl list\ncontaining the child nodes. Note that this list is not \"live\". E.g.\n\n @list = $node->getChildNodes;\t      # returns a perl list\n $nodelist = $node->getChildNodes;    # returns a NodeList (object reference)\n for my $kid ($node->getChildNodes)   # iterate over the children of $node\n\n=item getFirstChild\n\nThe first child of this node. If there is no such node, this returns undef.\n\n=item getLastChild\n\nThe last child of this node. If there is no such node, this returns undef.\n\n=item getPreviousSibling\n\nThe node immediately preceding this node. If there is no such \nnode, this returns undef.\n\n=item getNextSibling\n\nThe node immediately following this node. If there is no such node, this returns \nundef.\n\n=item getAttributes\n\nA NamedNodeMap containing the attributes (Attr nodes) of this node \n(if it is an Element) or undef otherwise.\nNote that adding/removing attributes from the returned object, also adds/removes\nattributes from the Element node that the NamedNodeMap came from.\n\n=item getOwnerDocument\n\nThe Document object associated with this node. This is also\nthe Document object used to create new nodes. When this node\nis a Document this is undef.\n\n=item insertBefore (newChild, refChild)\n\nInserts the node newChild before the existing child node\nrefChild. If refChild is undef, insert newChild at the end of\nthe list of children.\n\nIf newChild is a DocumentFragment object, all of its children\nare inserted, in the same order, before refChild. If the\nnewChild is already in the tree, it is first removed.\n\nReturn Value: The node being inserted.\n\nDOMExceptions:\n\n=over 4\n\n=item * HIERARCHY_REQUEST_ERR\n\nRaised if this node is of a type that does not allow children of the type of\nthe newChild node, or if the node to insert is one of this node's ancestors.\n\n=item * WRONG_DOCUMENT_ERR\n\nRaised if newChild was created from a different document than the one that \ncreated this node.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=item * NOT_FOUND_ERR\n\nRaised if refChild is not a child of this node.\n\n=back\n\n=item replaceChild (newChild, oldChild)\n\nReplaces the child node oldChild with newChild in the list of\nchildren, and returns the oldChild node. If the newChild is\nalready in the tree, it is first removed.\n\nReturn Value: The node replaced.\n\nDOMExceptions:\n\n=over 4\n\n=item * HIERARCHY_REQUEST_ERR\n\nRaised if this node is of a type that does not allow children of the type of\nthe newChild node, or it the node to put in is one of this node's ancestors.\n\n=item * WRONG_DOCUMENT_ERR\n\nRaised if newChild was created from a different document than the one that \ncreated this node.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=item * NOT_FOUND_ERR\n\nRaised if oldChild is not a child of this node.\n\n=back\n\n=item removeChild (oldChild)\n\nRemoves the child node indicated by oldChild from the list of\nchildren, and returns it.\n\nReturn Value: The node removed.\n\nDOMExceptions:\n\n=over 4\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=item * NOT_FOUND_ERR\n\nRaised if oldChild is not a child of this node.\n\n=back\n\n=item appendChild (newChild)\n\nAdds the node newChild to the end of the list of children of\nthis node. If the newChild is already in the tree, it is\nfirst removed. If it is a DocumentFragment object, the entire contents of \nthe document fragment are moved into the child list of this node\n\nReturn Value: The node added.\n\nDOMExceptions:\n\n=over 4\n\n=item * HIERARCHY_REQUEST_ERR\n\nRaised if this node is of a type that does not allow children of the type of\nthe newChild node, or if the node to append is one of this node's ancestors.\n\n=item * WRONG_DOCUMENT_ERR\n\nRaised if newChild was created from a different document than the one that \ncreated this node.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=back\n\n=item hasChildNodes\n\nThis is a convenience method to allow easy determination of\nwhether a node has any children.\n\nReturn Value: 1 if the node has any children, 0 otherwise.\n\n=item cloneNode (deep)\n\nReturns a duplicate of this node, i.e., serves as a generic\ncopy constructor for nodes. The duplicate node has no parent\n(parentNode returns undef.).\n\nCloning an Element copies all attributes and their values,\nincluding those generated by the XML processor to represent\ndefaulted attributes, but this method does not copy any text\nit contains unless it is a deep clone, since the text is\ncontained in a child Text node. Cloning any other type of\nnode simply returns a copy of this node.\n\nParameters: \n I<deep>   If true, recursively clone the subtree under the specified node.\nIf false, clone only the node itself (and its attributes, if it is an Element).\n\nReturn Value: The duplicate node.\n\n=item normalize\n\nPuts all Text nodes in the full depth of the sub-tree\nunderneath this Element into a \"normal\" form where only\nmarkup (e.g., tags, comments, processing instructions, CDATA\nsections, and entity references) separates Text nodes, i.e.,\nthere are no adjacent Text nodes. This can be used to ensure\nthat the DOM view of a document is the same as if it were\nsaved and re-loaded, and is useful when operations (such as\nXPointer lookups) that depend on a particular document tree\nstructure are to be used.\n\nB<Not In DOM Spec>: In the DOM Spec this method is defined in the Element and \nDocument class interfaces only, but it doesn't hurt to have it here...\n\n=item getElementsByTagName (name [, recurse])\n\nReturns a NodeList of all descendant elements with a given\ntag name, in the order in which they would be encountered in\na preorder traversal of the Element tree.\n\nParameters:\n I<name>  The name of the tag to match on. The special value \"*\" matches all tags.\n I<recurse>  Whether it should return only direct child nodes (0) or any descendant that matches the tag name (1). This argument is optional and defaults to 1. It is not part of the DOM spec.\n\nReturn Value: A list of matching Element nodes.\n\nNOTE: this implementation does not return a \"live\" NodeList for\ngetElementsByTagName. See L<CAVEATS>.\n\nWhen this method is called in a list context, it returns a regular perl list\ncontaining the result nodes. E.g.\n\n @list = $node->getElementsByTagName(\"tag\");       # returns a perl list\n $nodelist = $node->getElementsByTagName(\"tag\");   # returns a NodeList (object ref.)\n for my $elem ($node->getElementsByTagName(\"tag\")) # iterate over the result nodes\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item getNodeTypeName\n\nReturn the string describing the node type. \nE.g. returns \"ELEMENT_NODE\" if getNodeType returns ELEMENT_NODE.\nIt uses @XML::DOM::Node::NodeNames.\n\n=item toString\n\nReturns the entire subtree as a string.\n\n=item printToFile (filename)\n\nPrints the entire subtree to the file with the specified filename.\n\nCroaks: if the file could not be opened for writing.\n\n=item printToFileHandle (handle)\n\nPrints the entire subtree to the file handle.\nE.g. to print to STDOUT:\n\n $node->printToFileHandle (\\*STDOUT);\n\n=item print (obj)\n\nPrints the entire subtree using the object's print method. E.g to print to a\nFileHandle object:\n\n $f = new FileHandle (\"file.out\", \"w\");\n $node->print ($f);\n\n=item getChildIndex (child)\n\nReturns the index of the child node in the list returned by getChildNodes.\n\nReturn Value: the index or -1 if the node is not found.\n\n=item getChildAtIndex (index)\n\nReturns the child node at the specifed index or undef.\n\n=item addText (text)\n\nAppends the specified string to the last child if it is a Text node, or else \nappends a new Text node (with the specified text.)\n\nReturn Value: the last child if it was a Text node or else the new Text node.\n\n=item dispose\n\nRemoves all circular references in this node and its descendants so the \nobjects can be claimed for garbage collection. The objects should not be used\nafterwards.\n\n=item setOwnerDocument (doc)\n\nSets the ownerDocument property of this node and all its children (and \nattributes etc.) to the specified document.\nThis allows the user to cut and paste document subtrees between different\nXML::DOM::Documents. The node should be removed from the original document\nfirst, before calling setOwnerDocument.\n\nThis method does nothing when called on a Document node.\n\n=item isAncestor (parent)\n\nReturns 1 if parent is an ancestor of this node or if it is this node itself.\n\n=item expandEntityRefs (str)\n\nExpands all the entity references in the string and returns the result.\nThe entity references can be character references (e.g. \"&#123;\" or \"&#x1fc2\"),\ndefault entity references (\"&quot;\", \"&gt;\", \"&lt;\", \"&apos;\" and \"&amp;\") or\nentity references defined in Entity objects as part of the DocumentType of\nthe owning Document. Character references are expanded into UTF-8.\nParameter entity references (e.g. %ent;) are not expanded.\n\n=item to_sax ( %HANDLERS )\n\nE.g.\n\n $node->to_sax (DocumentHandler => $my_handler, \n\t\tHandler => $handler2 );\n\n%HANDLERS may contain the following handlers:\n\n=over 4\n\n=item * DocumentHandler\n\n=item * DTDHandler\n\n=item * EntityResolver\n\n=item * Handler \n\nDefault handler when one of the above is not specified\n\n=back\n\nEach XML::DOM::Node generates the appropriate SAX callbacks (for the\nappropriate SAX handler.) Different SAX handlers can be plugged in to\naccomplish different things, e.g. L<XML::Checker> would check the node \n(currently only Document and Element nodes are supported), L<XML::Handler::BuildDOM>\nwould create a new DOM subtree (thereby, in essence, copying the Node)\nand in the near future, XML::Writer could print the node.\nAll Perl SAX related work is still in flux, so this interface may change a \nlittle.\n\nSee PerlSAX for the description of the SAX interface.\n\n=item check ( [$checker] )\n\nSee descriptions for check() in L<XML::DOM::Document> and L<XML::DOM::Element>.\n\n=item xql ( @XQL_OPTIONS )\n\nTo use the xql method, you must first I<use> L<XML::XQL> and L<XML::XQL::DOM>.\nThis method is basically a shortcut for:\n\n $query = new XML::XQL::Query ( @XQL_OPTIONS );\n return $query->solve ($node);\n\nIf the first parameter in @XQL_OPTIONS is the XQL expression, you can leave off\nthe 'Expr' keyword, so:\n\n $node->xql (\"doc//elem1[@attr]\", @other_options);\n\nis identical to:\n\n $node->xql (Expr => \"doc//elem1[@attr]\", @other_options);\n\nSee L<XML::XQL::Query> for other available XQL_OPTIONS.\nSee L<XML::XQL> and L<XML::XQL::Tutorial> for more info.\n\n=item isHidden ()\n\nWhether the node is hidden.\nSee L<Hidden Nodes|XML::DOM/_Hidden_Nodes_> for details.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/NodeList.pm",
    "content": "######################################################################\npackage XML::DOM::NodeList;\n######################################################################\n\nuse vars qw ( $EMPTY );\n\n# Empty NodeList\n$EMPTY = new XML::DOM::NodeList;\n\nsub new \n{\n    bless [], $_[0];\n}\n\nsub item \n{\n    $_[0]->[$_[1]];\n}\n\nsub getLength \n{\n    int (@{$_[0]});\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub dispose\n{\n    my $self = shift;\n    for my $kid (@{$self})\n    {\n\t$kid->dispose;\n    }\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    for my $kid (@{$self})\n    { \n\t$kid->setOwnerDocument ($doc);\n    }\n}\n\n1; # package return code\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/NodeList.pod",
    "content": "=head1 NAME\n\nXML::DOM::NodeList - A node list as used by XML::DOM\n\n=head1 DESCRIPTION\n\nThe NodeList interface provides the abstraction of an ordered\ncollection of nodes, without defining or constraining how this\ncollection is implemented.\n\nThe items in the NodeList are accessible via an integral index,\nstarting from 0.\n\nAlthough the DOM spec states that all NodeLists are \"live\" in that they\nallways reflect changes to the DOM tree, the NodeList returned by\ngetElementsByTagName is not live in this implementation. See L<CAVEATS>\nfor details.\n\n=head2 METHODS\n\n=over 4\n\n=item item (index)\n\nReturns the indexth item in the collection. If index is\ngreater than or equal to the number of nodes in the list,\nthis returns undef.\n\n=item getLength\n\nThe number of nodes in the list. The range of valid child\nnode indices is 0 to length-1 inclusive.\n\n=back\n\n=head2 Additional methods not in the DOM Spec\n\n=over 4\n\n=item dispose\n\nRemoves all circular references in this NodeList and its descendants so the \nobjects can be claimed for garbage collection. The objects should not be used\nafterwards.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Notation.pod",
    "content": "=head1 NAME\n\nXML::DOM::Notation - An XML NOTATION in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Notation extends L<XML::DOM::Node>.\n\nThis node represents a Notation, e.g.\n\n <!NOTATION gs SYSTEM \"GhostScript\">\n\n <!NOTATION name PUBLIC \"pubId\">\n\n <!NOTATION name PUBLIC \"pubId\" \"sysId\">\n\n <!NOTATION name SYSTEM \"sysId\">\n\n=head2 METHODS\n\n=over 4\n\n=item getName and setName (name)\n\nReturns (or sets) the Notation name, which is the first token after the \nNOTATION keyword.\n\n=item getSysId and setSysId (sysId)\n\nReturns (or sets) the system ID, which is the token after the optional\nSYSTEM keyword.\n\n=item getPubId and setPubId (pubId)\n\nReturns (or sets) the public ID, which is the token after the optional\nPUBLIC keyword.\n\n=item getBase\n\nThis is passed by XML::Parser in the Notation handler. \nI don't know what it is yet.\n\n=item getNodeName\n\nReturns the same as getName.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Parser.pod",
    "content": "=head1 NAME\n\nXML::DOM::Parser - An XML::Parser that builds XML::DOM document structures\n\n=head1 SYNOPSIS\n\n use XML::DOM;\n\n my $parser = new XML::DOM::Parser;\n my $doc = $parser->parsefile (\"file.xml\");\n $doc->dispose; # Avoid memory leaks - cleanup circular references\n\n=head1 DESCRIPTION\n\nXML::DOM::Parser extends L<XML::Parser>\n\nThe XML::Parser module was written by Clark Cooper and\nis built on top of XML::Parser::Expat, \nwhich is a lower level interface to James Clark's expat library.\n\nXML::DOM::Parser parses XML strings or files\nand builds a data structure that conforms to the API of the Document Object \nModel as described at L<http://www.w3.org/TR/REC-DOM-Level-1>.\nSee the L<XML::Parser> manpage for other additional properties of the \nXML::DOM::Parser class. \nNote that the 'Style' property should not be used (it is set internally.)\n\nThe XML::Parser B<NoExpand> option is more or less supported, in that it will\ngenerate EntityReference objects whenever an entity reference is encountered\nin character data. I'm not sure how useful this is. Any comments are welcome.\n\nAs described in the synopsis, when you create an XML::DOM::Parser object, \nthe parse and parsefile methods create an L<XML::DOM::Document> object\nfrom the specified input. This Document object can then be examined, modified and\nwritten back out to a file or converted to a string.\n\nWhen using XML::DOM with XML::Parser version 2.19 and up, setting the \nXML::DOM::Parser option B<KeepCDATA> to 1 will store CDATASections in\nCDATASection nodes, instead of converting them to Text nodes.\nSubsequent CDATASection nodes will be merged into one. Let me know if this\nis a problem.\n\n=head1 Using LWP to parse URLs\n\nThe parsefile() method now also supports URLs, e.g. I<http://www.erols.com/enno/xsa.xml>.\nIt uses LWP to download the file and then calls parse() on the resulting string.\nBy default it will use a L<LWP::UserAgent> that is created as follows:\n\n use LWP::UserAgent;\n $LWP_USER_AGENT = LWP::UserAgent->new;\n $LWP_USER_AGENT->env_proxy;\n\nNote that env_proxy reads proxy settings from environment variables, which is what I need to\ndo to get thru our firewall. If you want to use a different LWP::UserAgent, you can either set\nit globally with:\n\n XML::DOM::Parser::set_LWP_UserAgent ($my_agent);\n\nor, you can specify it for a specific XML::DOM::Parser by passing it to the constructor:\n\n my $parser = new XML::DOM::Parser (LWP_UserAgent => $my_agent);\n\nCurrently, LWP is used when the filename (passed to parsefile) starts with one of\nthe following URL schemes: http, https, ftp, wais, gopher, or file (followed by a colon.)\nIf I missed one, please let me know. \n\nThe LWP modules are part of libwww-perl which is available at CPAN.\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/PerlSAX.pm",
    "content": "package XML::DOM::PerlSAX;\nuse strict;\n\nBEGIN\n{\n    if ($^W)\n    {\n\twarn \"XML::DOM::PerlSAX has been renamed to XML::Handler::BuildDOM, please modify your code accordingly.\";\n    }\n}\n\nuse XML::Handler::BuildDOM;\nuse vars qw{ @ISA };\n@ISA = qw{ XML::Handler::BuildDOM };\n\n1; # package return code\n\n__END__\n\n=head1 NAME\n\nXML::DOM::PerlSAX - Old name of L<XML::Handler::BuildDOM>\n\n=head1 SYNOPSIS\n\n See L<XML::DOM::BuildDOM>\n\n=head1 DESCRIPTION\n\nXML::DOM::PerlSAX was renamed to L<XML::Handler::BuildDOM> to comply\nwith naming conventions for PerlSAX filters/handlers.\n\nFor backward compatibility, this package will remain in existence \n(it simply includes XML::Handler::BuildDOM), but it will print a warning when \nrunning with I<'perl -w'>.\n\n=head1 AUTHOR\n\nEnno Derksen is the original author.\n\nSend bug reports, hints, tips, suggestions to T.J Mather at\n<F<tjmather@tjmather.com>>.\n\n=head1 SEE ALSO\n\nL<XML::Handler::BuildDOM>, L<XML::DOM>\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/ProcessingInstruction.pod",
    "content": "=head1 NAME\n\nXML::DOM::ProcessingInstruction - An XML processing instruction in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::ProcessingInstruction extends L<XML::DOM::Node>.\n\nIt represents a \"processing instruction\", used in XML as a way to keep \nprocessor-specific information in the text of the document. An example:\n\n <?PI processing instruction?>\n\nHere, \"PI\" is the target and \"processing instruction\" is the data.\n\n=head2 METHODS\n\n=over 4\n\n=item getTarget\n\nThe target of this processing instruction. XML defines this\nas being the first token following the markup that begins the\nprocessing instruction.\n\n=item getData and setData (data)\n\nThe content of this processing instruction. This is from the\nfirst non white space character after the target to the\ncharacter immediately preceding the ?>.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/Text.pod",
    "content": "=head1 NAME\n\nXML::DOM::Text - A piece of XML text in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::Text extends L<XML::DOM::CharacterData>, which extends\nL<XML::DOM::Node>.\n\nThe Text interface represents the textual content (termed character\ndata in XML) of an Element or Attr. If there is no markup inside an\nelement's content, the text is contained in a single object\nimplementing the Text interface that is the only child of the element.\nIf there is markup, it is parsed into a list of elements and Text nodes\nthat form the list of children of the element.\n\nWhen a document is first made available via the DOM, there is only one\nText node for each block of text. Users may create adjacent Text nodes\nthat represent the contents of a given element without any intervening\nmarkup, but should be aware that there is no way to represent the\nseparations between these nodes in XML or HTML, so they will not (in\ngeneral) persist between DOM editing sessions. The normalize() method\non Element merges any such adjacent Text objects into a single node for\neach block of text; this is recommended before employing operations\nthat depend on a particular document structure, such as navigation with\nXPointers.\n\n=head2 METHODS\n\n=over 4\n\n=item splitText (offset)\n\nBreaks this Text node into two Text nodes at the specified\noffset, keeping both in the tree as siblings. This node then\nonly contains all the content up to the offset point. And a\nnew Text node, which is inserted as the next sibling of this\nnode, contains all the content at and after the offset point.\n\nParameters:\n I<offset>  The offset at which to split, starting from 0.\n\nReturn Value: The new Text node.\n\nDOMExceptions:\n\n=over 4\n\n=item * INDEX_SIZE_ERR\n\nRaised if the specified offset is negative or greater than the number of \ncharacters in data.\n\n=item * NO_MODIFICATION_ALLOWED_ERR\n\nRaised if this node is readonly.\n\n=back\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM/XMLDecl.pod",
    "content": "=head1 NAME\n\nXML::DOM::XMLDecl - XML declaration in XML::DOM\n\n=head1 DESCRIPTION\n\nXML::DOM::XMLDecl extends L<XML::DOM::Node>, but is not part of the DOM Level 1\nspecification.\n\nIt contains the XML declaration, e.g.\n\n <?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"yes\"?>\n\nSee also XML::DOM::Document::getXMLDecl.\n\n=head2 METHODS\n\n=over 4\n\n=item getVersion and setVersion (version)\n\nReturns and sets the XML version. At the time of this writing the version should\nalways be \"1.0\"\n\n=item getEncoding and setEncoding (encoding)\n\nundef may be specified for the encoding value.\n\n=item getStandalone and setStandalone (standalone)\n\nundef may be specified for the standalone value.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/DOM.pm",
    "content": "################################################################################\n#\n# Perl module: XML::DOM\n#\n# By Enno Derksen\n#\n################################################################################\n#\n# To do:\n#\n# * optimize Attr if it only contains 1 Text node to hold the value\n# * fix setDocType!\n#\n# * BUG: setOwnerDocument - does not process default attr values correctly,\n#   they still point to the old doc.\n# * change Exception mechanism\n# * maybe: more checking of sysId etc.\n# * NoExpand mode (don't know what else is useful)\n# * various odds and ends: see comments starting with \"??\"\n# * normalize(1) could also expand CDataSections and EntityReferences\n# * parse a DocumentFragment?\n# * encoding support\n#\n######################################################################\n\n######################################################################\npackage XML::DOM;\n######################################################################\n\nuse strict;\n\nuse vars qw( $VERSION @ISA @EXPORT\n\t     $IgnoreReadOnly $SafeMode $TagStyle\n\t     %DefaultEntities %DecodeDefaultEntity\n\t   );\nuse Carp;\nuse XML::RegExp;\n\nBEGIN\n{\n    require XML::Parser;\n    $VERSION = '1.44';\n\n    my $needVersion = '2.28';\n    die \"need at least XML::Parser version $needVersion (current=${XML::Parser::VERSION})\"\n\tunless $XML::Parser::VERSION >= $needVersion;\n\n    @ISA = qw( Exporter );\n\n    # Constants for XML::DOM Node types\n    @EXPORT = qw(\n\t     UNKNOWN_NODE\n\t     ELEMENT_NODE\n\t     ATTRIBUTE_NODE\n\t     TEXT_NODE\n\t     CDATA_SECTION_NODE\n\t     ENTITY_REFERENCE_NODE\n\t     ENTITY_NODE\n\t     PROCESSING_INSTRUCTION_NODE\n\t     COMMENT_NODE\n\t     DOCUMENT_NODE\n\t     DOCUMENT_TYPE_NODE\n\t     DOCUMENT_FRAGMENT_NODE\n\t     NOTATION_NODE\n\t     ELEMENT_DECL_NODE\n\t     ATT_DEF_NODE\n\t     XML_DECL_NODE\n\t     ATTLIST_DECL_NODE\n\t    );\n}\n\n#---- Constant definitions\n\n# Node types\n\nsub UNKNOWN_NODE                () { 0 }\t\t# not in the DOM Spec\n\nsub ELEMENT_NODE                () { 1 }\nsub ATTRIBUTE_NODE              () { 2 }\nsub TEXT_NODE                   () { 3 }\nsub CDATA_SECTION_NODE          () { 4 }\nsub ENTITY_REFERENCE_NODE       () { 5 }\nsub ENTITY_NODE                 () { 6 }\nsub PROCESSING_INSTRUCTION_NODE () { 7 }\nsub COMMENT_NODE                () { 8 }\nsub DOCUMENT_NODE               () { 9 }\nsub DOCUMENT_TYPE_NODE          () { 10}\nsub DOCUMENT_FRAGMENT_NODE      () { 11}\nsub NOTATION_NODE               () { 12}\n\nsub ELEMENT_DECL_NODE\t\t() { 13 }\t# not in the DOM Spec\nsub ATT_DEF_NODE \t\t() { 14 }\t# not in the DOM Spec\nsub XML_DECL_NODE \t\t() { 15 }\t# not in the DOM Spec\nsub ATTLIST_DECL_NODE\t\t() { 16 }\t# not in the DOM Spec\n\n%DefaultEntities = \n(\n \"quot\"\t\t=> '\"',\n \"gt\"\t\t=> \">\",\n \"lt\"\t\t=> \"<\",\n \"apos\"\t\t=> \"'\",\n \"amp\"\t\t=> \"&\"\n);\n\n%DecodeDefaultEntity =\n(\n '\"' => \"&quot;\",\n \">\" => \"&gt;\",\n \"<\" => \"&lt;\",\n \"'\" => \"&apos;\",\n \"&\" => \"&amp;\"\n);\n\n#\n# If you don't want DOM warnings to use 'warn', override this method like this:\n#\n# { # start block scope\n#\tlocal *XML::DOM::warning = \\&my_warn;\n#\t... your code here ...\n# } # end block scope (old XML::DOM::warning takes effect again)\n#\nsub warning\t# static\n{\n    warn @_;\n}\n\n#\n# This method defines several things in the caller's package, so you can use named constants to\n# access the array that holds the member data, i.e. $self->[_Data]. It assumes the caller's package\n# defines a class that is implemented as a blessed array reference.\n# Note that this is very similar to using 'use fields' and 'use base'.\n#\n# E.g. if $fields eq \"Name Model\", $parent eq \"XML::DOM::Node\" and\n# XML::DOM::Node had \"A B C\" as fields and it was called from package \"XML::DOM::ElementDecl\",\n# then this code would basically do the following:\n#\n# package XML::DOM::ElementDecl;\n#\n# sub _Name  () { 3 }\t# Note that parent class had three fields\n# sub _Model () { 4 }\n#\n# # Maps constant names (without '_') to constant (int) value\n# %HFIELDS = ( %XML::DOM::Node::HFIELDS, Name => _Name, Model => _Model );\n#\n# # Define XML:DOM::ElementDecl as a subclass of XML::DOM::Node\n# @ISA = qw{ XML::DOM::Node };\n#\n# # The following function names can be exported into the user's namespace.\n# @EXPORT_OK = qw{ _Name _Model };\n#\n# # The following function names can be exported into the user's namespace\n# # with: import XML::DOM::ElementDecl qw( :Fields );\n# %EXPORT_TAGS = ( Fields => qw{ _Name _Model } );\n#\nsub def_fields\t# static\n{\n    my ($fields, $parent) = @_;\n\n    my ($pkg) = caller;\n\n    no strict 'refs';\n\n    my @f = split (/\\s+/, $fields);\n    my $n = 0;\n\n    my %hfields;\n    if (defined $parent)\n    {\n\tmy %pf = %{\"$parent\\::HFIELDS\"};\n\t%hfields = %pf;\n\n\t$n = scalar (keys %pf);\n\t@{\"$pkg\\::ISA\"} = ( $parent );\n    }\n\n    my $i = $n;\n    for (@f)\n    {\n\teval \"sub $pkg\\::_$_ () { $i }\";\n\t$hfields{$_} = $i;\n\t$i++;\n    }\n    %{\"$pkg\\::HFIELDS\"} = %hfields;\n    @{\"$pkg\\::EXPORT_OK\"} = map { \"_$_\" } @f;\n    \n    ${\"$pkg\\::EXPORT_TAGS\"}{Fields} = [ map { \"_$_\" } @f ];\n}\n\n# sub blesh\n# {\n#     my $hashref = shift;\n#     my $class = shift;\n#     no strict 'refs';\n#     my $self = bless [\\%{\"$class\\::FIELDS\"}], $class;\n#     if (defined $hashref)\n#     {\n# \tfor (keys %$hashref)\n# \t{\n# \t    $self->{$_} = $hashref->{$_};\n# \t}\n#     }\n#     $self;\n# }\n\n# sub blesh2\n# {\n#     my $hashref = shift;\n#     my $class = shift;\n#     no strict 'refs';\n#     my $self = bless [\\%{\"$class\\::FIELDS\"}], $class;\n#     if (defined $hashref)\n#     {\n# \tfor (keys %$hashref)\n# \t{\n# \t    eval { $self->{$_} = $hashref->{$_}; };\n# \t    croak \"ERROR in field [$_] $@\" if $@;\n# \t}\n#     }\n#     $self;\n#}\n\n#\n# CDATA section may not contain \"]]>\"\n#\nsub encodeCDATA\n{\n    my ($str) = shift;\n    $str =~ s/]]>/]]&gt;/go;\n    $str;\n}\n\n#\n# PI may not contain \"?>\"\n#\nsub encodeProcessingInstruction\n{\n    my ($str) = shift;\n    $str =~ s/\\?>/?&gt;/go;\n    $str;\n}\n\n#\n#?? Not sure if this is right - must prevent double minus somehow...\n#\nsub encodeComment\n{\n    my ($str) = shift;\n    return undef unless defined $str;\n\n    $str =~ s/--/&#45;&#45;/go;\n    $str;\n}\n\n#\n# For debugging\n#\nsub toHex\n{\n    my $str = shift;\n    my $len = length($str);\n    my @a = unpack (\"C$len\", $str);\n    my $s = \"\";\n    for (@a)\n    {\n\t$s .= sprintf (\"%02x\", $_);\n    }\n    $s;\n}\n\n#\n# 2nd parameter $default: list of Default Entity characters that need to be \n# converted (e.g. \"&<\" for conversion to \"&amp;\" and \"&lt;\" resp.)\n#\nsub encodeText\n{\n    my ($str, $default) = @_;\n    return undef unless defined $str;\n\n    if ($] >= 5.006) {\n      $str =~ s/([$default])|(]]>)/\n        defined ($1) ? $DecodeDefaultEntity{$1} : \"]]&gt;\" /egs;\n    }\n    else {\n      $str =~ s/([\\xC0-\\xDF].|[\\xE0-\\xEF]..|[\\xF0-\\xFF]...)|([$default])|(]]>)/\n        defined($1) ? XmlUtf8Decode ($1) :\n        defined ($2) ? $DecodeDefaultEntity{$2} : \"]]&gt;\" /egs;\n    }\n\n#?? could there be references that should not be expanded?\n# e.g. should not replace &#nn; &#xAF; and &abc;\n#    $str =~ s/&(?!($ReName|#[0-9]+|#x[0-9a-fA-F]+);)/&amp;/go;\n\n    $str;\n}\n\n#\n# Used by AttDef - default value\n#\nsub encodeAttrValue\n{\n    encodeText (shift, '\"&<>');\n}\n\n#\n# Converts an integer (Unicode - ISO/IEC 10646) to a UTF-8 encoded character \n# sequence.\n# Used when converting e.g. &#123; or &#x3ff; to a string value.\n#\n# Algorithm borrowed from expat/xmltok.c/XmlUtf8Encode()\n#\n# not checking for bad characters: < 0, x00-x08, x0B-x0C, x0E-x1F, xFFFE-xFFFF\n#\nsub XmlUtf8Encode\n{\n    my $n = shift;\n    if ($n < 0x80)\n    {\n\treturn chr ($n);\n    }\n    elsif ($n < 0x800)\n    {\n\treturn pack (\"CC\", (($n >> 6) | 0xc0), (($n & 0x3f) | 0x80));\n    }\n    elsif ($n < 0x10000)\n    {\n\treturn pack (\"CCC\", (($n >> 12) | 0xe0), ((($n >> 6) & 0x3f) | 0x80),\n\t\t     (($n & 0x3f) | 0x80));\n    }\n    elsif ($n < 0x110000)\n    {\n\treturn pack (\"CCCC\", (($n >> 18) | 0xf0), ((($n >> 12) & 0x3f) | 0x80),\n\t\t     ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80));\n    }\n    croak \"number is too large for Unicode [$n] in &XmlUtf8Encode\";\n}\n\n#\n# Opposite of XmlUtf8Decode plus it adds prefix \"&#\" or \"&#x\" and suffix \";\"\n# The 2nd parameter ($hex) indicates whether the result is hex encoded or not.\n#\nsub XmlUtf8Decode\n{\n    my ($str, $hex) = @_;\n    my $len = length ($str);\n    my $n;\n\n    if ($len == 2)\n    {\n\tmy @n = unpack \"C2\", $str;\n\t$n = (($n[0] & 0x3f) << 6) + ($n[1] & 0x3f);\n    }\n    elsif ($len == 3)\n    {\n\tmy @n = unpack \"C3\", $str;\n\t$n = (($n[0] & 0x1f) << 12) + (($n[1] & 0x3f) << 6) + \n\t\t($n[2] & 0x3f);\n    }\n    elsif ($len == 4)\n    {\n\tmy @n = unpack \"C4\", $str;\n\t$n = (($n[0] & 0x0f) << 18) + (($n[1] & 0x3f) << 12) + \n\t\t(($n[2] & 0x3f) << 6) + ($n[3] & 0x3f);\n    }\n    elsif ($len == 1)\t# just to be complete...\n    {\n\t$n = ord ($str);\n    }\n    else\n    {\n\tcroak \"bad value [$str] for XmlUtf8Decode\";\n    }\n    $hex ? sprintf (\"&#x%x;\", $n) : \"&#$n;\";\n}\n\n$IgnoreReadOnly = 0;\n$SafeMode = 1;\n\nsub getIgnoreReadOnly\n{\n    $IgnoreReadOnly;\n}\n\n#\n# The global flag $IgnoreReadOnly is set to the specified value and the old \n# value of $IgnoreReadOnly is returned.\n#\n# To temporarily disable read-only related exceptions (i.e. when parsing\n# XML or temporarily), do the following:\n#\n# my $oldIgnore = XML::DOM::ignoreReadOnly (1);\n# ... do whatever you want ...\n# XML::DOM::ignoreReadOnly ($oldIgnore);\n#\nsub ignoreReadOnly\n{\n    my $i = $IgnoreReadOnly;\n    $IgnoreReadOnly = $_[0];\n    return $i;\n}\n\n#\n# XML spec seems to break its own rules... (see ENTITY xmlpio)\n#\nsub forgiving_isValidName\n{\n    use bytes;  # XML::RegExp expressed in terms encoded UTF8\n    $_[0] =~ /^$XML::RegExp::Name$/o;\n}\n\n#\n# Don't allow names starting with xml (either case)\n#\nsub picky_isValidName\n{\n    use bytes;  # XML::RegExp expressed in terms encoded UTF8\n    $_[0] =~ /^$XML::RegExp::Name$/o and $_[0] !~ /^xml/i;\n}\n\n# Be forgiving by default, \n*isValidName = \\&forgiving_isValidName;\n\nsub allowReservedNames\t\t# static\n{\n    *isValidName = ($_[0] ? \\&forgiving_isValidName : \\&picky_isValidName);\n}\n\nsub getAllowReservedNames\t# static\n{\n    *isValidName == \\&forgiving_isValidName;\n}\n\n#\n# Always compress empty tags by default\n# This is used by Element::print.\n#\n$TagStyle = sub { 0 };\n\nsub setTagCompression\n{\n    $TagStyle = shift;\n}\n\n######################################################################\npackage XML::DOM::PrintToFileHandle;\n######################################################################\n\n#\n# Used by XML::DOM::Node::printToFileHandle\n#\n\nsub new\n{\n    my($class, $fn) = @_;\n    bless $fn, $class;\n}\n\nsub print\n{\n    my ($self, $str) = @_;\n    print $self $str;\n}\n\n######################################################################\npackage XML::DOM::PrintToString;\n######################################################################\n\nuse vars qw{ $Singleton };\n\n#\n# Used by XML::DOM::Node::toString to concatenate strings\n#\n\nsub new\n{\n    my($class) = @_;\n    my $str = \"\";\n    bless \\$str, $class;\n}\n\nsub print\n{\n    my ($self, $str) = @_;\n    $$self .= $str;\n}\n\nsub toString\n{\n    my $self = shift;\n    $$self;\n}\n\nsub reset\n{\n    ${$_[0]} = \"\";\n}\n\n$Singleton = new XML::DOM::PrintToString;\n\n######################################################################\npackage XML::DOM::DOMImplementation;\n######################################################################\n \n$XML::DOM::DOMImplementation::Singleton =\n  bless \\$XML::DOM::DOMImplementation::Singleton, 'XML::DOM::DOMImplementation';\n \nsub hasFeature \n{\n    my ($self, $feature, $version) = @_;\n \n    uc($feature) eq 'XML' and ($version eq '1.0' || $version eq '');\n}\n\n\n######################################################################\npackage XML::XQL::Node;\t\t# forward declaration\n######################################################################\n\n######################################################################\npackage XML::DOM::Node;\n######################################################################\n\nuse vars qw( @NodeNames @EXPORT @ISA %HFIELDS @EXPORT_OK @EXPORT_TAGS );\n\nBEGIN \n{\n  use XML::DOM::DOMException;\n  import Carp;\n\n  require FileHandle;\n\n  @ISA = qw( Exporter XML::XQL::Node );\n\n  # NOTE: SortKey is used in XML::XQL::Node. \n  #       UserData is reserved for users (Hang your data here!)\n  XML::DOM::def_fields (\"C A Doc Parent ReadOnly UsedIn Hidden SortKey UserData\");\n\n  push (@EXPORT, qw(\n\t\t    UNKNOWN_NODE\n\t\t    ELEMENT_NODE\n\t\t    ATTRIBUTE_NODE\n\t\t    TEXT_NODE\n\t\t    CDATA_SECTION_NODE\n\t\t    ENTITY_REFERENCE_NODE\n\t\t    ENTITY_NODE\n\t\t    PROCESSING_INSTRUCTION_NODE\n\t\t    COMMENT_NODE\n\t\t    DOCUMENT_NODE\n\t\t    DOCUMENT_TYPE_NODE\n\t\t    DOCUMENT_FRAGMENT_NODE\n\t\t    NOTATION_NODE\n\t\t    ELEMENT_DECL_NODE\n\t\t    ATT_DEF_NODE\n\t\t    XML_DECL_NODE\n\t\t    ATTLIST_DECL_NODE\n\t\t   ));\n}\n\n#---- Constant definitions\n\n# Node types\n\nsub UNKNOWN_NODE                () {0;}\t\t# not in the DOM Spec\n\nsub ELEMENT_NODE                () {1;}\nsub ATTRIBUTE_NODE              () {2;}\nsub TEXT_NODE                   () {3;}\nsub CDATA_SECTION_NODE          () {4;}\nsub ENTITY_REFERENCE_NODE       () {5;}\nsub ENTITY_NODE                 () {6;}\nsub PROCESSING_INSTRUCTION_NODE () {7;}\nsub COMMENT_NODE                () {8;}\nsub DOCUMENT_NODE               () {9;}\nsub DOCUMENT_TYPE_NODE          () {10;}\nsub DOCUMENT_FRAGMENT_NODE      () {11;}\nsub NOTATION_NODE               () {12;}\n\nsub ELEMENT_DECL_NODE\t\t() {13;}\t# not in the DOM Spec\nsub ATT_DEF_NODE \t\t() {14;}\t# not in the DOM Spec\nsub XML_DECL_NODE \t\t() {15;}\t# not in the DOM Spec\nsub ATTLIST_DECL_NODE\t\t() {16;}\t# not in the DOM Spec\n\n@NodeNames = (\n\t      \"UNKNOWN_NODE\",\t# not in the DOM Spec!\n\n\t      \"ELEMENT_NODE\",\n\t      \"ATTRIBUTE_NODE\",\n\t      \"TEXT_NODE\",\n\t      \"CDATA_SECTION_NODE\",\n\t      \"ENTITY_REFERENCE_NODE\",\n\t      \"ENTITY_NODE\",\n\t      \"PROCESSING_INSTRUCTION_NODE\",\n\t      \"COMMENT_NODE\",\n\t      \"DOCUMENT_NODE\",\n\t      \"DOCUMENT_TYPE_NODE\",\n\t      \"DOCUMENT_FRAGMENT_NODE\",\n\t      \"NOTATION_NODE\",\n\n\t      \"ELEMENT_DECL_NODE\",\n\t      \"ATT_DEF_NODE\",\n\t      \"XML_DECL_NODE\",\n\t      \"ATTLIST_DECL_NODE\"\n\t     );\n\nsub decoupleUsedIn\n{\n    my $self = shift;\n    undef $self->[_UsedIn]; # was delete\n}\n\nsub getParentNode\n{\n    $_[0]->[_Parent];\n}\n\nsub appendChild\n{\n    my ($self, $node) = @_;\n\n    # REC 7473\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t\t  \"node is ReadOnly\")\n\t    if $self->isReadOnly;\n    }\n\n    my $doc = $self->[_Doc];\n\n    if ($node->isDocumentFragmentNode)\n    {\n\tif ($XML::DOM::SafeMode)\n\t{\n\t    for my $n (@{$node->[_C]})\n\t    {\n\t\tcroak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,\n\t\t\t\t\t\t  \"nodes belong to different documents\")\n\t\t    if $doc != $n->[_Doc];\n\t\t\n\t\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t\t  \"node is ancestor of parent node\")\n\t\t    if $n->isAncestor ($self);\n\t\t\n\t\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t\t  \"bad node type\")\n\t\t    if $self->rejectChild ($n);\n\t    }\n\t}\n\n\tmy @list = @{$node->[_C]};\t# don't try to compress this\n\tfor my $n (@list)\n\t{\n\t    $n->setParentNode ($self);\n\t}\n\tpush @{$self->[_C]}, @list;\n    }\n    else\n    {\n\tif ($XML::DOM::SafeMode)\n\t{\n\t    croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,\n\t\t\t\t\t\t  \"nodes belong to different documents\")\n\t\tif $doc != $node->[_Doc];\n\t\t\n\t    croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t\t  \"node is ancestor of parent node\")\n\t\tif $node->isAncestor ($self);\n\t\t\n\t    croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t\t  \"bad node type\")\n\t\tif $self->rejectChild ($node);\n\t}\n\t$node->setParentNode ($self);\n\tpush @{$self->[_C]}, $node;\n    }\n    $node;\n}\n\nsub getChildNodes\n{\n    # NOTE: if node can't have children, $self->[_C] is undef.\n    my $kids = $_[0]->[_C];\n\n    # Return a list if called in list context.\n    wantarray ? (defined ($kids) ? @{ $kids } : ()) :\n\t        (defined ($kids) ? $kids : $XML::DOM::NodeList::EMPTY);\n}\n\nsub hasChildNodes\n{\n    my $kids = $_[0]->[_C];\n    defined ($kids) && @$kids > 0;\n}\n\n# This method is overriden in Document\nsub getOwnerDocument\n{\n    $_[0]->[_Doc];\n}\n\nsub getFirstChild\n{\n    my $kids = $_[0]->[_C];\n    defined $kids ? $kids->[0] : undef; \n}\n\nsub getLastChild\n{\n    my $kids = $_[0]->[_C];\n    defined $kids ? $kids->[-1] : undef; \n}\n\nsub getPreviousSibling\n{\n    my $self = shift;\n\n    my $pa = $self->[_Parent];\n    return undef unless $pa;\n    my $index = $pa->getChildIndex ($self);\n    return undef unless $index;\n\n    $pa->getChildAtIndex ($index - 1);\n}\n\nsub getNextSibling\n{\n    my $self = shift;\n\n    my $pa = $self->[_Parent];\n    return undef unless $pa;\n\n    $pa->getChildAtIndex ($pa->getChildIndex ($self) + 1);\n}\n\nsub insertBefore\n{\n    my ($self, $node, $refNode) = @_;\n\n    return $self->appendChild ($node) unless $refNode;\t# append at the end\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my @nodes = ($node);\n    @nodes = @{$node->[_C]}\n\tif $node->getNodeType == DOCUMENT_FRAGMENT_NODE;\n\n    my $doc = $self->[_Doc];\n\n    for my $n (@nodes)\n    {\n\tcroak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,\n\t\t\t\t\t  \"nodes belong to different documents\")\n\t    if $doc != $n->[_Doc];\n\t\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"node is ancestor of parent node\")\n\t    if $n->isAncestor ($self);\n\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"bad node type\")\n\t    if $self->rejectChild ($n);\n    }\n    my $index = $self->getChildIndex ($refNode);\n\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR,\n\t\t\t\t      \"reference node not found\")\n\tif $index == -1;\n\n    for my $n (@nodes)\n    {\n\t$n->setParentNode ($self);\n    }\n\n    splice (@{$self->[_C]}, $index, 0, @nodes);\n    $node;\n}\n\nsub replaceChild\n{\n    my ($self, $node, $refNode) = @_;\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my @nodes = ($node);\n    @nodes = @{$node->[_C]}\n\tif $node->getNodeType == DOCUMENT_FRAGMENT_NODE;\n\n    for my $n (@nodes)\n    {\n\tcroak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,\n\t\t\t\t\t  \"nodes belong to different documents\")\n\t    if $self->[_Doc] != $n->[_Doc];\n\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"node is ancestor of parent node\")\n\t    if $n->isAncestor ($self);\n\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"bad node type\")\n\t    if $self->rejectChild ($n);\n    }\n\n    my $index = $self->getChildIndex ($refNode);\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR,\n\t\t\t\t      \"reference node not found\")\n\tif $index == -1;\n\n    for my $n (@nodes)\n    {\n\t$n->setParentNode ($self);\n    }\n    splice (@{$self->[_C]}, $index, 1, @nodes);\n\n    $refNode->removeChildHoodMemories;\n    $refNode;\n}\n\nsub removeChild\n{\n    my ($self, $node) = @_;\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my $index = $self->getChildIndex ($node);\n\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR,\n\t\t\t\t      \"reference node not found\")\n\tif $index == -1;\n\n    splice (@{$self->[_C]}, $index, 1, ());\n\n    $node->removeChildHoodMemories;\n    $node;\n}\n\n# Merge all subsequent Text nodes in this subtree\nsub normalize\n{\n    my ($self) = shift;\n    my $prev = undef;\t# previous Text node\n\n    return unless defined $self->[_C];\n\n    my @nodes = @{$self->[_C]};\n    my $i = 0;\n    my $n = @nodes;\n    while ($i < $n)\n    {\n\tmy $node = $self->getChildAtIndex($i);\n\tmy $type = $node->getNodeType;\n\n\tif (defined $prev)\n\t{\n\t    # It should not merge CDATASections. Dom Spec says:\n\t    #  Adjacent CDATASections nodes are not merged by use\n\t    #  of the Element.normalize() method.\n\t    if ($type == TEXT_NODE)\n\t    {\n\t\t$prev->appendData ($node->getData);\n\t\t$self->removeChild ($node);\n\t\t$i--;\n\t\t$n--;\n\t    }\n\t    else\n\t    {\n\t\t$prev = undef;\n\t\tif ($type == ELEMENT_NODE)\n\t\t{\n\t\t    $node->normalize;\n\t\t    if (defined $node->[_A])\n\t\t    {\n\t\t\tfor my $attr (@{$node->[_A]->getValues})\n\t\t\t{\n\t\t\t    $attr->normalize;\n\t\t\t}\n\t\t    }\n\t\t}\n\t    }\n\t}\n\telse\n\t{\n\t    if ($type == TEXT_NODE)\n\t    {\n\t\t$prev = $node;\n\t    }\n\t    elsif ($type == ELEMENT_NODE)\n\t    {\n\t\t$node->normalize;\n\t\tif (defined $node->[_A])\n\t\t{\n\t\t    for my $attr (@{$node->[_A]->getValues})\n\t\t    {\n\t\t\t$attr->normalize;\n\t\t    }\n\t\t}\n\t    }\n\t}\n\t$i++;\n    }\n}\n\n#\n# Return all Element nodes in the subtree that have the specified tagName.\n# If tagName is \"*\", all Element nodes are returned.\n# NOTE: the DOM Spec does not specify a 3rd or 4th parameter\n#\nsub getElementsByTagName\n{\n    my ($self, $tagName, $recurse, $list) = @_;\n    $recurse = 1 unless defined $recurse;\n    $list = (wantarray ? [] : new XML::DOM::NodeList) unless defined $list;\n\n    return unless defined $self->[_C];\n\n    # preorder traversal: check parent node first\n    for my $kid (@{$self->[_C]})\n    {\n\tif ($kid->isElementNode)\n\t{\n\t    if ($tagName eq \"*\" || $tagName eq $kid->getTagName)\n\t    {\n\t\tpush @{$list}, $kid;\n\t    }\n\t    $kid->getElementsByTagName ($tagName, $recurse, $list) if $recurse;\n\t}\n    }\n    wantarray ? @{ $list } : $list;\n}\n\nsub getNodeValue\n{\n    undef;\n}\n\nsub setNodeValue\n{\n    # no-op\n}\n\n#\n# Redefined by XML::DOM::Element\n#\nsub getAttributes\n{\n    undef;\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    $self->[_Doc] = $doc;\n\n    return unless defined $self->[_C];\n\n    for my $kid (@{$self->[_C]})\n    {\n\t$kid->setOwnerDocument ($doc);\n    }\n}\n\nsub cloneChildren\n{\n    my ($self, $node, $deep) = @_;\n    return unless $deep;\n    \n    return unless defined $self->[_C];\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    for my $kid (@{$node->[_C]})\n    {\n\tmy $newNode = $kid->cloneNode ($deep);\n\tpush @{$self->[_C]}, $newNode;\n\t$newNode->setParentNode ($self);\n    }\n}\n\n#\n# For internal use only!\n#\nsub removeChildHoodMemories\n{\n    my ($self) = @_;\n\n    undef $self->[_Parent]; # was delete\n}\n\n#\n# Remove circular dependencies. The Node and its children should\n# not be used afterwards.\n#\nsub dispose\n{\n    my $self = shift;\n\n    $self->removeChildHoodMemories;\n\n    if (defined $self->[_C])\n    {\n\t$self->[_C]->dispose;\n\tundef $self->[_C]; # was delete\n    }\n    undef $self->[_Doc]; # was delete\n}\n\n#\n# For internal use only!\n#\nsub setParentNode\n{\n    my ($self, $parent) = @_;\n\n    # REC 7473\n    my $oldParent = $self->[_Parent];\n    if (defined $oldParent)\n    {\n\t# remove from current parent\n\tmy $index = $oldParent->getChildIndex ($self);\n\n\t# NOTE: we don't have to check if [_C] is defined,\n\t# because were removing a child here!\n\tsplice (@{$oldParent->[_C]}, $index, 1, ());\n\n\t$self->removeChildHoodMemories;\n    }\n    $self->[_Parent] = $parent;\n}\n\n#\n# This function can return 3 values:\n# 1: always readOnly\n# 0: never readOnly\n# undef: depends on parent node \n#\n# Returns 1 for DocumentType, Notation, Entity, EntityReference, Attlist, \n# ElementDecl, AttDef. \n# The first 4 are readOnly according to the DOM Spec, the others are always \n# children of DocumentType. (Naturally, children of a readOnly node have to be\n# readOnly as well...)\n# These nodes are always readOnly regardless of who their ancestors are.\n# Other nodes, e.g. Comment, are readOnly only if their parent is readOnly,\n# which basically means that one of its ancestors has to be one of the\n# aforementioned node types.\n# Document and DocumentFragment return 0 for obvious reasons.\n# Attr, Element, CDATASection, Text return 0. The DOM spec says that they can \n# be children of an Entity, but I don't think that that's possible\n# with the current XML::Parser.\n# Attr uses a {ReadOnly} property, which is only set if it's part of a AttDef.\n# Always returns 0 if ignoreReadOnly is set.\n#\nsub isReadOnly\n{\n    # default implementation for Nodes that are always readOnly\n    ! $XML::DOM::IgnoreReadOnly;\n}\n\nsub rejectChild\n{\n    1;\n}\n\nsub getNodeTypeName\n{\n    $NodeNames[$_[0]->getNodeType];\n}\n\nsub getChildIndex\n{\n    my ($self, $node) = @_;\n    my $i = 0;\n\n    return -1 unless defined $self->[_C];\n\n    for my $kid (@{$self->[_C]})\n    {\n\treturn $i if $kid == $node;\n\t$i++;\n    }\n    -1;\n}\n\nsub getChildAtIndex\n{\n    my $kids = $_[0]->[_C];\n    defined ($kids) ? $kids->[$_[1]] : undef;\n}\n\nsub isAncestor\n{\n    my ($self, $node) = @_;\n\n    do\n    {\n\treturn 1 if $self == $node;\n\t$node = $node->[_Parent];\n    }\n    while (defined $node);\n\n    0;\n}\n\n#\n# Added for optimization. Overriden in XML::DOM::Text\n#\nsub isTextNode\n{\n    0;\n}\n\n#\n# Added for optimization. Overriden in XML::DOM::DocumentFragment\n#\nsub isDocumentFragmentNode\n{\n    0;\n}\n\n#\n# Added for optimization. Overriden in XML::DOM::Element\n#\nsub isElementNode\n{\n    0;\n}\n\n#\n# Add a Text node with the specified value or append the text to the\n# previous Node if it is a Text node.\n#\nsub addText\n{\n    # REC 9456 (if it was called)\n    my ($self, $str) = @_;\n\n    my $node = ${$self->[_C]}[-1];\t# $self->getLastChild\n\n    if (defined ($node) && $node->isTextNode)\n    {\n\t# REC 5475 (if it was called)\n\t$node->appendData ($str);\n    }\n    else\n    {\n\t$node = $self->[_Doc]->createTextNode ($str);\n\t$self->appendChild ($node);\n    }\n    $node;\n}\n\n#\n# Add a CDATASection node with the specified value or append the text to the\n# previous Node if it is a CDATASection node.\n#\nsub addCDATA\n{\n    my ($self, $str) = @_;\n\n    my $node = ${$self->[_C]}[-1];\t# $self->getLastChild\n\n    if (defined ($node) && $node->getNodeType == CDATA_SECTION_NODE)\n    {\n\t$node->appendData ($str);\n    }\n    else\n    {\n\t$node = $self->[_Doc]->createCDATASection ($str);\n\t$self->appendChild ($node);\n    }\n}\n\nsub removeChildNodes\n{\n    my $self = shift;\n\n    my $cref = $self->[_C];\n    return unless defined $cref;\n\n    my $kid;\n    while ($kid = pop @{$cref})\n    {\n\tundef $kid->[_Parent]; # was delete\n    }\n}\n\nsub toString\n{\n    my $self = shift;\n    my $pr = $XML::DOM::PrintToString::Singleton;\n    $pr->reset;\n    $self->print ($pr);\n    $pr->toString;\n}\n\nsub to_sax\n{\n    my $self = shift;\n    unshift @_, 'Handler' if (@_ == 1);\n    my %h = @_;\n\n    my $doch = exists ($h{DocumentHandler}) ? $h{DocumentHandler} \n\t\t\t\t\t    : $h{Handler};\n    my $dtdh = exists ($h{DTDHandler}) ? $h{DTDHandler} \n\t\t\t\t       : $h{Handler};\n    my $enth = exists ($h{EntityResolver}) ? $h{EntityResolver} \n\t\t\t\t\t   : $h{Handler};\n\n    $self->_to_sax ($doch, $dtdh, $enth);\n}\n\nsub printToFile\n{\n    my ($self, $fileName) = @_;\n    my $fh = new FileHandle ($fileName, \"w\") || \n\tcroak \"printToFile - can't open output file $fileName\";\n    \n    $self->print ($fh);\n    $fh->close;\n}\n\n#\n# Use print to print to a FileHandle object (see printToFile code)\n#\nsub printToFileHandle\n{\n    my ($self, $FH) = @_;\n    my $pr = new XML::DOM::PrintToFileHandle ($FH);\n    $self->print ($pr);\n}\n\n#\n# Used by AttDef::setDefault to convert unexpanded default attribute value\n#\nsub expandEntityRefs\n{\n    my ($self, $str) = @_;\n    my $doctype = $self->[_Doc]->getDoctype;\n\n    use bytes;  # XML::RegExp expressed in terms encoded UTF8\n    $str =~ s/&($XML::RegExp::Name|(#([0-9]+)|#x([0-9a-fA-F]+)));/\n\tdefined($2) ? XML::DOM::XmlUtf8Encode ($3 || hex ($4)) \n\t\t    : expandEntityRef ($1, $doctype)/ego;\n    $str;\n}\n\nsub expandEntityRef\n{\n    my ($entity, $doctype) = @_;\n\n    my $expanded = $XML::DOM::DefaultEntities{$entity};\n    return $expanded if defined $expanded;\n\n    $expanded = $doctype->getEntity ($entity);\n    return $expanded->getValue if (defined $expanded);\n\n#?? is this an error?\n    croak \"Could not expand entity reference of [$entity]\\n\";\n#    return \"&$entity;\";\t# entity not found\n}\n\nsub isHidden\n{\n    $_[0]->[_Hidden];\n}\n\n######################################################################\npackage XML::DOM::Attr;\n######################################################################\n\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Name Specified\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $name, $value, $specified) = @_;\n\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,\n\t\t\t\t\t  \"bad Attr name [$name]\")\n\t    unless XML::DOM::isValidName ($name);\n    }\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_C] = new XML::DOM::NodeList;\n    $self->[_Name] = $name;\n    \n    if (defined $value)\n    {\n\t$self->setValue ($value);\n\t$self->[_Specified] = (defined $specified) ? $specified : 1;\n    }\n    else\n    {\n\t$self->[_Specified] = 0;\n    }\n    $self;\n}\n\nsub getNodeType\n{\n    ATTRIBUTE_NODE;\n}\n\nsub isSpecified\n{\n    $_[0]->[_Specified];\n}\n\nsub getName\n{\n    $_[0]->[_Name];\n}\n\nsub getValue\n{\n    my $self = shift;\n    my $value = \"\";\n\n    for my $kid (@{$self->[_C]})\n    {\n\t$value .= $kid->getData if defined $kid->getData;\n    }\n    $value;\n}\n\nsub setValue\n{\n    my ($self, $value) = @_;\n\n    # REC 1147\n    $self->removeChildNodes;\n    $self->appendChild ($self->[_Doc]->createTextNode ($value));\n    $self->[_Specified] = 1;\n}\n\nsub getNodeName\n{\n    $_[0]->getName;\n}\n\nsub getNodeValue\n{\n    $_[0]->getValue;\n}\n\nsub setNodeValue\n{\n    $_[0]->setValue ($_[1]);\n}\n\nsub cloneNode\n{\n    my ($self) = @_;\t# parameter deep is ignored\n\n    my $node = $self->[_Doc]->createAttribute ($self->getName);\n    $node->[_Specified] = $self->[_Specified];\n    $node->[_ReadOnly] = 1 if $self->[_ReadOnly];\n\n    $node->cloneChildren ($self, 1);\n    $node;\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n#\n\nsub isReadOnly\n{\n    # ReadOnly property is set if it's part of a AttDef\n    ! $XML::DOM::IgnoreReadOnly && defined ($_[0]->[_ReadOnly]);\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_Name];\n\n    $FILE->print (\"$name=\\\"\");\n    for my $kid (@{$self->[_C]})\n    {\n\tif ($kid->getNodeType == TEXT_NODE)\n\t{\n\t    $FILE->print (XML::DOM::encodeAttrValue ($kid->getData));\n\t}\n\telse\t# ENTITY_REFERENCE_NODE\n\t{\n\t    $kid->print ($FILE);\n\t}\n    }\n    $FILE->print (\"\\\"\");\n}\n\nsub rejectChild\n{\n    my $t = $_[1]->getNodeType;\n\n    $t != TEXT_NODE \n    && $t != ENTITY_REFERENCE_NODE;\n}\n\n######################################################################\npackage XML::DOM::ProcessingInstruction;\n######################################################################\n\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Target Data\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $target, $data, $hidden) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,\n\t\t\t      \"bad ProcessingInstruction Target [$target]\")\n\tunless (XML::DOM::isValidName ($target) && $target !~ /^xml$/io);\n\n    my $self = bless [], $class;\n  \n    $self->[_Doc] = $doc;\n    $self->[_Target] = $target;\n    $self->[_Data] = $data;\n    $self->[_Hidden] = $hidden;\n    $self;\n}\n\nsub getNodeType\n{\n    PROCESSING_INSTRUCTION_NODE;\n}\n\nsub getTarget\n{\n    $_[0]->[_Target];\n}\n\nsub getData\n{\n    $_[0]->[_Data];\n}\n\nsub setData\n{\n    my ($self, $data) = @_;\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    $self->[_Data] = $data;\n}\n\nsub getNodeName\n{\n    $_[0]->[_Target];\n}\n\n#\n# Same as getData\n#\nsub getNodeValue\n{\n    $_[0]->[_Data];\n}\n\nsub setNodeValue\n{\n    $_[0]->setData ($_[1]);\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createProcessingInstruction ($self->getTarget, \n\t\t\t\t\t\t$self->getData,\n\t\t\t\t\t\t$self->isHidden);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    return 0 if $XML::DOM::IgnoreReadOnly;\n\n    my $pa = $_[0]->[_Parent];\n    defined ($pa) ? $pa->isReadOnly : 0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    $FILE->print (\"<?\");\n    $FILE->print ($self->[_Target]);\n    $FILE->print (\" \");\n    $FILE->print (XML::DOM::encodeProcessingInstruction ($self->[_Data]));\n    $FILE->print (\"?>\");\n}\n\nsub _to_sax {\n    my ($self, $doch) = @_;\n    $doch->processing_instruction({Target => $self->getTarget, Data => $self->getData});\n}\n\n######################################################################\npackage XML::DOM::Notation;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Name Base SysId PubId\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $name, $base, $sysId, $pubId, $hidden) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t\t      \"bad Notation Name [$name]\")\n\tunless XML::DOM::isValidName ($name);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_Name] = $name;\n    $self->[_Base] = $base;\n    $self->[_SysId] = $sysId;\n    $self->[_PubId] = $pubId;\n    $self->[_Hidden] = $hidden;\n    $self;\n}\n\nsub getNodeType\n{\n    NOTATION_NODE;\n}\n\nsub getPubId\n{\n    $_[0]->[_PubId];\n}\n\nsub setPubId\n{\n    $_[0]->[_PubId] = $_[1];\n}\n\nsub getSysId\n{\n    $_[0]->[_SysId];\n}\n\nsub setSysId\n{\n    $_[0]->[_SysId] = $_[1];\n}\n\nsub getName\n{\n    $_[0]->[_Name];\n}\n\nsub setName\n{\n    $_[0]->[_Name] = $_[1];\n}\n\nsub getBase\n{\n    $_[0]->[_Base];\n}\n\nsub getNodeName\n{\n    $_[0]->[_Name];\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_Name];\n    my $sysId = $self->[_SysId];\n    my $pubId = $self->[_PubId];\n\n    $FILE->print (\"<!NOTATION $name \");\n\n    if (defined $pubId)\n    {\n\t$FILE->print (\" PUBLIC \\\"$pubId\\\"\");\t\n    }\n    if (defined $sysId)\n    {\n\t$FILE->print (\" SYSTEM \\\"$sysId\\\"\");\t\n    }\n    $FILE->print (\">\");\n}\n\nsub cloneNode\n{\n    my ($self) = @_;\n    $self->[_Doc]->createNotation ($self->[_Name], $self->[_Base], \n\t\t\t\t   $self->[_SysId], $self->[_PubId],\n\t\t\t\t   $self->[_Hidden]);\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->Notation ($self->getName, $self->getBase, \n\t\t     $self->getSysId, $self->getPubId);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $dtdh->notation_decl ( { Name => $self->getName, \n\t\t\t     Base => $self->getBase, \n\t\t\t     SystemId => $self->getSysId, \n\t\t\t     PublicId => $self->getPubId });\n}\n\n######################################################################\npackage XML::DOM::Entity;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"NotationName Parameter Value Ndata SysId PubId\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $notationName, $value, $sysId, $pubId, $ndata, $isParam, $hidden) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t\t      \"bad Entity Name [$notationName]\")\n\tunless XML::DOM::isValidName ($notationName);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_NotationName] = $notationName;\n    $self->[_Parameter] = $isParam;\n    $self->[_Value] = $value;\n    $self->[_Ndata] = $ndata;\n    $self->[_SysId] = $sysId;\n    $self->[_PubId] = $pubId;\n    $self->[_Hidden] = $hidden;\n    $self;\n#?? maybe Value should be a Text node\n}\n\nsub getNodeType\n{\n    ENTITY_NODE;\n}\n\nsub getPubId\n{\n    $_[0]->[_PubId];\n}\n\nsub getSysId\n{\n    $_[0]->[_SysId];\n}\n\n# Dom Spec says: \n#  For unparsed entities, the name of the notation for the\n#  entity. For parsed entities, this is null.\n\n#?? do we have unparsed entities?\nsub getNotationName\n{\n    $_[0]->[_NotationName];\n}\n\nsub getNodeName\n{\n    $_[0]->[_NotationName];\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createEntity ($self->[_NotationName], $self->[_Value], \n\t\t\t\t $self->[_SysId], $self->[_PubId], \n\t\t\t\t $self->[_Ndata], $self->[_Parameter], $self->[_Hidden]);\n}\n\nsub rejectChild\n{\n    return 1;\n#?? if value is split over subnodes, recode this section\n# also add:\t\t\t\t   C => new XML::DOM::NodeList,\n\n    my $t = $_[1];\n\n    return $t == TEXT_NODE\n\t|| $t == ENTITY_REFERENCE_NODE \n\t|| $t == PROCESSING_INSTRUCTION_NODE\n\t|| $t == COMMENT_NODE\n\t|| $t == CDATA_SECTION_NODE\n\t|| $t == ELEMENT_NODE;\n}\n\nsub getValue\n{\n    $_[0]->[_Value];\n}\n\nsub isParameterEntity\n{\n    $_[0]->[_Parameter];\n}\n\nsub getNdata\n{\n    $_[0]->[_Ndata];\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_NotationName];\n\n    my $par = $self->isParameterEntity ? \"% \" : \"\";\n\n    $FILE->print (\"<!ENTITY $par$name\");\n\n    my $value = $self->[_Value];\n    my $sysId = $self->[_SysId];\n    my $pubId = $self->[_PubId];\n    my $ndata = $self->[_Ndata];\n\n    if (defined $value)\n    {\n#?? Not sure what to do if it contains both single and double quote\n\t$value = ($value =~ /\\\"/) ? \"'$value'\" : \"\\\"$value\\\"\";\n\t$FILE->print (\" $value\");\n    }\n    if (defined $pubId)\n    {\n\t$FILE->print (\" PUBLIC \\\"$pubId\\\"\");\t\n    }\n    elsif (defined $sysId)\n    {\n\t$FILE->print (\" SYSTEM\");\n    }\n\n    if (defined $sysId)\n    {\n\t$FILE->print (\" \\\"$sysId\\\"\");\n    }\n    $FILE->print (\" NDATA $ndata\") if defined $ndata;\n    $FILE->print (\">\");\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    my $name = ($self->isParameterEntity ? '%' : \"\") . $self->getNotationName; \n    $iter->Entity ($name,\n\t\t   $self->getValue, $self->getSysId, $self->getPubId, \n\t\t   $self->getNdata);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    my $name = ($self->isParameterEntity ? '%' : \"\") . $self->getNotationName; \n    $dtdh->entity_decl ( { Name => $name, \n\t\t\t   Value => $self->getValue, \n\t\t\t   SystemId => $self->getSysId, \n\t\t\t   PublicId => $self->getPubId, \n\t\t\t   Notation => $self->getNdata } );\n}\n\n######################################################################\npackage XML::DOM::EntityReference;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"EntityName Parameter NoExpand\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $name, $parameter, $noExpand) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t      \"bad Entity Name [$name] in EntityReference\")\n\tunless XML::DOM::isValidName ($name);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_EntityName] = $name;\n    $self->[_Parameter] = ($parameter || 0);\n    $self->[_NoExpand] = ($noExpand || 0);\n\n    $self;\n}\n\nsub getNodeType\n{\n    ENTITY_REFERENCE_NODE;\n}\n\nsub getNodeName\n{\n    $_[0]->[_EntityName];\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub getEntityName\n{\n    $_[0]->[_EntityName];\n}\n\nsub isParameterEntity\n{\n    $_[0]->[_Parameter];\n}\n\nsub getData\n{\n    my $self = shift;\n    my $name = $self->[_EntityName];\n    my $parameter = $self->[_Parameter];\n\n    my $data;\n    if ($self->[_NoExpand]) {\n      $data = \"&$name;\" if $name;\n    } else {\n      $data = $self->[_Doc]->expandEntity ($name, $parameter);\n    }\n\n    unless (defined $data)\n    {\n#?? this is probably an error, but perhaps requires check to NoExpand\n# will fix it?\n\tmy $pc = $parameter ? \"%\" : \"&\";\n\t$data = \"$pc$name;\";\n    }\n    $data;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_EntityName];\n\n#?? or do we expand the entities?\n\n    my $pc = $self->[_Parameter] ? \"%\" : \"&\";\n    $FILE->print (\"$pc$name;\");\n}\n\n# Dom Spec says:\n#     [...] but if such an Entity exists, then\n#     the child list of the EntityReference node is the same as that of the\n#     Entity node. \n#\n#     The resolution of the children of the EntityReference (the replacement\n#     value of the referenced Entity) may be lazily evaluated; actions by the\n#     user (such as calling the childNodes method on the EntityReference\n#     node) are assumed to trigger the evaluation.\nsub getChildNodes\n{\n    my $self = shift;\n    my $entity = $self->[_Doc]->getEntity ($self->[_EntityName]);\n    defined ($entity) ? $entity->getChildNodes : new XML::DOM::NodeList;\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createEntityReference ($self->[_EntityName], \n                                         $self->[_Parameter],\n                                         $self->[_NoExpand],\n                                          );\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->EntityRef ($self->getEntityName, $self->isParameterEntity);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    my @par = $self->isParameterEntity ? (Parameter => 1) : ();\n#?? not supported by PerlSAX: $self->isParameterEntity\n\n    $doch->entity_reference ( { Name => $self->getEntityName, @par } );\n}\n\n# NOTE: an EntityReference can't really have children, so rejectChild\n# is not reimplemented (i.e. it always returns 0.)\n\n######################################################################\npackage XML::DOM::AttDef;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Name Type Fixed Default Required Implied Quote\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\n#------------------------------------------------------------\n# Extra method implementations\n\n# AttDef is not part of DOM Spec\nsub new\n{\n    my ($class, $doc, $name, $attrType, $default, $fixed, $hidden) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,\n\t\t\t\t      \"bad Attr name in AttDef [$name]\")\n\tunless XML::DOM::isValidName ($name);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_Name] = $name;\n    $self->[_Type] = $attrType;\n\n    if (defined $default)\n    {\n\tif ($default eq \"#REQUIRED\")\n\t{\n\t    $self->[_Required] = 1;\n\t}\n\telsif ($default eq \"#IMPLIED\")\n\t{\n\t    $self->[_Implied] = 1;\n\t}\n\telse\n\t{\n\t    # strip off quotes - see Attlist handler in XML::Parser\n            # this regexp doesn't work with 5.8.0 unicode\n#\t    $default =~ m#^([\"'])(.*)['\"]$#;\n#\t    $self->[_Quote] = $1;\t# keep track of the quote character\n#\t    $self->[_Default] = $self->setDefault ($2);\n\n          # workaround for 5.8.0 unicode\n          $default =~ s!^([\"'])!!;\n          $self->[_Quote] = $1;\n          $default =~ s!([\"'])$!!;\n          $self->[_Default] = $self->setDefault ($default);\n\t    \t    \n#?? should default value be decoded - what if it contains e.g. \"&amp;\"\n\t}\n    }\n    $self->[_Fixed] = $fixed if defined $fixed;\n    $self->[_Hidden] = $hidden if defined $hidden;\n\n    $self;\n}\n\nsub getNodeType\n{\n    ATT_DEF_NODE;\n}\n\nsub getName\n{\n    $_[0]->[_Name];\n}\n\n# So it can be added to a NamedNodeMap\nsub getNodeName\n{\n    $_[0]->[_Name];\n}\n\nsub getType\n{\n    $_[0]->[_Type];\n}\n\nsub setType\n{\n    $_[0]->[_Type] = $_[1];\n}\n\nsub getDefault\n{\n    $_[0]->[_Default];\n}\n\nsub setDefault\n{\n    my ($self, $value) = @_;\n\n    # specified=0, it's the default !\n    my $attr = $self->[_Doc]->createAttribute ($self->[_Name], undef, 0);\n    $attr->[_ReadOnly] = 1;\n\n#?? this should be split over Text and EntityReference nodes, just like other\n# Attr nodes - just expand the text for now\n    $value = $self->expandEntityRefs ($value);\n    $attr->addText ($value);\n#?? reimplement in NoExpand mode!\n\n    $attr;\n}\n\nsub isFixed\n{\n    $_[0]->[_Fixed] || 0;\n}\n\nsub isRequired\n{\n    $_[0]->[_Required] || 0;\n}\n\nsub isImplied\n{\n    $_[0]->[_Implied] || 0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_Name];\n    my $type = $self->[_Type];\n    my $fixed = $self->[_Fixed];\n    my $default = $self->[_Default];\n\n#    $FILE->print (\"$name $type\");\n    # replaced line above with the two lines below\n    # seems to be a bug in perl 5.6.0 that causes\n    # test 3 of dom_jp_attr.t to fail?\n    $FILE->print ($name);\n    $FILE->print (\" $type\");\n\n    $FILE->print (\" #FIXED\") if defined $fixed;\n\n    if ($self->[_Required])\n    {\n\t$FILE->print (\" #REQUIRED\");\n    }\n    elsif ($self->[_Implied])\n    {\n\t$FILE->print (\" #IMPLIED\");\n    }\n    elsif (defined ($default))\n    {\n\tmy $quote = $self->[_Quote];\n\t$FILE->print (\" $quote\");\n\tfor my $kid (@{$default->[_C]})\n\t{\n\t    $kid->print ($FILE);\n\t}\n\t$FILE->print ($quote);\t\n    }\n}\n\nsub getDefaultString\n{\n    my $self = shift;\n    my $default;\n\n    if ($self->[_Required])\n    {\n\treturn \"#REQUIRED\";\n    }\n    elsif ($self->[_Implied])\n    {\n\treturn \"#IMPLIED\";\n    }\n    elsif (defined ($default = $self->[_Default]))\n    {\n\tmy $quote = $self->[_Quote];\n\t$default = $default->toString;\n\treturn \"$quote$default$quote\";\n    }\n    undef;\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    my $node = new XML::DOM::AttDef ($self->[_Doc], $self->[_Name], $self->[_Type],\n\t\t\t\t     undef, $self->[_Fixed]);\n\n    $node->[_Required] = 1 if $self->[_Required];\n    $node->[_Implied] = 1 if $self->[_Implied];\n    $node->[_Fixed] = $self->[_Fixed] if defined $self->[_Fixed];\n    $node->[_Hidden] = $self->[_Hidden] if defined $self->[_Hidden];\n\n    if (defined $self->[_Default])\n    {\n\t$node->[_Default] = $self->[_Default]->cloneNode(1);\n    }\n    $node->[_Quote] = $self->[_Quote];\n\n    $node;\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    $self->SUPER::setOwnerDocument ($doc);\n\n    if (defined $self->[_Default])\n    {\n\t$self->[_Default]->setOwnerDocument ($doc);\n    }\n}\n\n######################################################################\npackage XML::DOM::AttlistDecl;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    import XML::DOM::AttDef qw{ :Fields };\n\n    XML::DOM::def_fields (\"ElementName\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\n#------------------------------------------------------------\n# Extra method implementations\n\n# AttlistDecl is not part of the DOM Spec\nsub new\n{\n    my ($class, $doc, $name) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t      \"bad Element TagName [$name] in AttlistDecl\")\n\tunless XML::DOM::isValidName ($name);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_C] = new XML::DOM::NodeList;\n    $self->[_ReadOnly] = 1;\n    $self->[_ElementName] = $name;\n\n    $self->[_A] = new XML::DOM::NamedNodeMap (Doc\t=> $doc,\n\t\t\t\t\t      ReadOnly\t=> 1,\n\t\t\t\t\t      Parent\t=> $self);\n\n    $self;\n}\n\nsub getNodeType\n{\n    ATTLIST_DECL_NODE;\n}\n\nsub getName\n{\n    $_[0]->[_ElementName];\n}\n\nsub getNodeName\n{\n    $_[0]->[_ElementName];\n}\n\nsub getAttDef\n{\n    my ($self, $attrName) = @_;\n    $self->[_A]->getNamedItem ($attrName);\n}\n\nsub addAttDef\n{\n    my ($self, $attrName, $type, $default, $fixed, $hidden) = @_;\n    my $node = $self->getAttDef ($attrName);\n\n    if (defined $node)\n    {\n\t# data will be ignored if already defined\n\tmy $elemName = $self->getName;\n\tXML::DOM::warning (\"multiple definitions of attribute $attrName for element $elemName, only first one is recognized\");\n    }\n    else\n    {\n\t$node = new XML::DOM::AttDef ($self->[_Doc], $attrName, $type, \n\t\t\t\t      $default, $fixed, $hidden);\n\t$self->[_A]->setNamedItem ($node);\n    }\n    $node;\n}\n\nsub getDefaultAttrValue\n{\n    my ($self, $attr) = @_;\n    my $attrNode = $self->getAttDef ($attr);\n    (defined $attrNode) ? $attrNode->getDefault : undef;\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n    my $node = $self->[_Doc]->createAttlistDecl ($self->[_ElementName]);\n    \n    $node->[_A] = $self->[_A]->cloneNode ($deep);\n    $node;\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    $self->SUPER::setOwnerDocument ($doc);\n\n    $self->[_A]->setOwnerDocument ($doc);\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->getName;\n    my @attlist = @{$self->[_A]->getValues};\n\n    my $hidden = 1;\n    for my $att (@attlist)\n    {\n\tunless ($att->[_Hidden])\n\t{\n\t    $hidden = 0;\n\t    last;\n\t}\n    }\n\n    unless ($hidden)\n    {\n\t$FILE->print (\"<!ATTLIST $name\");\n\n\tif (@attlist == 1)\n\t{\n\t    $FILE->print (\" \");\n\t    $attlist[0]->print ($FILE);\t    \n\t}\n\telse\n\t{\n\t    for my $attr (@attlist)\n\t    {\n\t\tnext if $attr->[_Hidden];\n\n\t\t$FILE->print (\"\\x0A  \");\n\t\t$attr->print ($FILE);\n\t    }\n\t}\n\t$FILE->print (\">\");\n    }\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    my $tag = $self->getName;\n    for my $a ($self->[_A]->getValues)\n    {\n\tmy $default = $a->isImplied ? '#IMPLIED' :\n\t    ($a->isRequired ? '#REQUIRED' : \n\t     ($a->[_Quote] . $a->getDefault->getValue . $a->[_Quote]));\n\n\t$iter->Attlist ($tag, $a->getName, $a->getType, $default, $a->isFixed); \n    }\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    my $tag = $self->getName;\n    for my $a ($self->[_A]->getValues)\n    {\n\tmy $default = $a->isImplied ? '#IMPLIED' :\n\t    ($a->isRequired ? '#REQUIRED' : \n\t     ($a->[_Quote] . $a->getDefault->getValue . $a->[_Quote]));\n\n\t$dtdh->attlist_decl ({ ElementName => $tag, \n\t\t\t       AttributeName => $a->getName, \n\t\t\t       Type => $a->[_Type], \n\t\t\t       Default => $default, \n\t\t\t       Fixed => $a->isFixed }); \n    }\n}\n\n######################################################################\npackage XML::DOM::ElementDecl;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Name Model\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\n\n#------------------------------------------------------------\n# Extra method implementations\n\n# ElementDecl is not part of the DOM Spec\nsub new\n{\n    my ($class, $doc, $name, $model, $hidden) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t      \"bad Element TagName [$name] in ElementDecl\")\n\tunless XML::DOM::isValidName ($name);\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_Name] = $name;\n    $self->[_ReadOnly] = 1;\n    $self->[_Model] = $model;\n    $self->[_Hidden] = $hidden;\n    $self;\n}\n\nsub getNodeType\n{\n    ELEMENT_DECL_NODE;\n}\n\nsub getName\n{\n    $_[0]->[_Name];\n}\n\nsub getNodeName\n{\n    $_[0]->[_Name];\n}\n\nsub getModel\n{\n    $_[0]->[_Model];\n}\n\nsub setModel\n{\n    my ($self, $model) = @_;\n\n    $self->[_Model] = $model;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_Name];\n    my $model = $self->[_Model];\n\n    $FILE->print (\"<!ELEMENT $name $model>\")\n\tunless $self->[_Hidden];\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createElementDecl ($self->[_Name], $self->[_Model], \n\t\t\t\t      $self->[_Hidden]);\n}\n\nsub to_expat\n{\n#?? add support for Hidden?? (allover, also in _to_sax!!)\n\n    my ($self, $iter) = @_;\n    $iter->Element ($self->getName, $self->getModel);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $dtdh->element_decl ( { Name => $self->getName, \n\t\t\t    Model => $self->getModel } );\n}\n\n######################################################################\npackage XML::DOM::Element;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"TagName\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse XML::DOM::NamedNodeMap;\nuse Carp;\n\nsub new\n{\n    my ($class, $doc, $tagName) = @_;\n\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t\t      \"bad Element TagName [$tagName]\")\n\t    unless XML::DOM::isValidName ($tagName);\n    }\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_C] = new XML::DOM::NodeList;\n    $self->[_TagName] = $tagName;\n\n# Now we're creating the NamedNodeMap only when needed (REC 2313 => 1147)    \n#    $self->[_A] = new XML::DOM::NamedNodeMap (Doc\t=> $doc,\n#\t\t\t\t\t     Parent\t=> $self);\n\n    $self;\n}\n\nsub getNodeType\n{\n    ELEMENT_NODE;\n}\n\nsub getTagName\n{\n    $_[0]->[_TagName];\n}\n\nsub getNodeName\n{\n    $_[0]->[_TagName];\n}\n\nsub getAttributeNode\n{\n    my ($self, $name) = @_;\n    return undef unless defined $self->[_A];\n\n    $self->getAttributes->{$name};\n}\n\nsub getAttribute\n{\n    my ($self, $name) = @_;\n    my $attr = $self->getAttributeNode ($name);\n    (defined $attr) ? $attr->getValue : \"\";\n}\n\nsub setAttribute\n{\n    my ($self, $name, $val) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,\n\t\t\t\t      \"bad Attr Name [$name]\")\n\tunless XML::DOM::isValidName ($name);\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my $node = $self->getAttributes->{$name};\n    if (defined $node)\n    {\n\t$node->setValue ($val);\n    }\n    else\n    {\n\t$node = $self->[_Doc]->createAttribute ($name, $val);\n\t$self->[_A]->setNamedItem ($node);\n    }\n}\n\nsub setAttributeNode\n{\n    my ($self, $node) = @_;\n    my $attr = $self->getAttributes;\n    my $name = $node->getNodeName;\n\n    # REC 1147\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,\n\t\t\t\t\t  \"nodes belong to different documents\")\n\t    if $self->[_Doc] != $node->[_Doc];\n\n\tcroak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t\t  \"node is ReadOnly\")\n\t    if $self->isReadOnly;\n\n\tmy $attrParent = $node->[_UsedIn];\n\tcroak new XML::DOM::DOMException (INUSE_ATTRIBUTE_ERR,\n\t\t\t\t\t  \"Attr is already used by another Element\")\n\t    if (defined ($attrParent) && $attrParent != $attr);\n    }\n\n    my $other = $attr->{$name};\n    $attr->removeNamedItem ($name) if defined $other;\n\n    $attr->setNamedItem ($node);\n\n    $other;\n}\n\nsub removeAttributeNode\n{\n    my ($self, $node) = @_;\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my $attr = $self->[_A];\n    unless (defined $attr)\n    {\n\tcroak new XML::DOM::DOMException (NOT_FOUND_ERR);\n\treturn undef;\n    }\n\n    my $name = $node->getNodeName;\n    my $attrNode = $attr->getNamedItem ($name);\n\n#?? should it croak if it's the default value?\n    croak new XML::DOM::DOMException (NOT_FOUND_ERR)\n\tunless $node == $attrNode;\n\n    # Not removing anything if it's the default value already\n    return undef unless $node->isSpecified;\n\n    $attr->removeNamedItem ($name);\n\n    # Substitute with default value if it's defined\n    my $default = $self->getDefaultAttrValue ($name);\n    if (defined $default)\n    {\n\tlocal $XML::DOM::IgnoreReadOnly = 1;\n\n\t$default = $default->cloneNode (1);\n\t$attr->setNamedItem ($default);\n    }\n    $node;\n}\n\nsub removeAttribute\n{\n    my ($self, $name) = @_;\n    my $attr = $self->[_A];\n    unless (defined $attr)\n    {\n\tcroak new XML::DOM::DOMException (NOT_FOUND_ERR);\n\treturn;\n    }\n    \n    my $node = $attr->getNamedItem ($name);\n    if (defined $node)\n    {\n#?? could use dispose() to remove circular references for gc, but what if\n#?? somebody is referencing it?\n\t$self->removeAttributeNode ($node);\n    }\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n    my $node = $self->[_Doc]->createElement ($self->getTagName);\n\n    # Always clone the Attr nodes, even if $deep == 0\n    if (defined $self->[_A])\n    {\n\t$node->[_A] = $self->[_A]->cloneNode (1);\t# deep=1\n\t$node->[_A]->setParentNode ($node);\n    }\n\n    $node->cloneChildren ($self, $deep);\n    $node;\n}\n\nsub getAttributes\n{\n    $_[0]->[_A] ||= XML::DOM::NamedNodeMap->new (Doc\t=> $_[0]->[_Doc],\n\t\t\t\t\t\t Parent\t=> $_[0]);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\n# Added for convenience\nsub setTagName\n{\n    my ($self, $tagName) = @_;\n\n    croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR, \n\t\t\t\t      \"bad Element TagName [$tagName]\")\n        unless XML::DOM::isValidName ($tagName);\n\n    $self->[_TagName] = $tagName;\n}\n\nsub isReadOnly\n{\n    0;\n}\n\n# Added for optimization.\nsub isElementNode\n{\n    1;\n}\n\nsub rejectChild\n{\n    my $t = $_[1]->getNodeType;\n\n    $t != TEXT_NODE\n    && $t != ENTITY_REFERENCE_NODE \n    && $t != PROCESSING_INSTRUCTION_NODE\n    && $t != COMMENT_NODE\n    && $t != CDATA_SECTION_NODE\n    && $t != ELEMENT_NODE;\n}\n\nsub getDefaultAttrValue\n{\n    my ($self, $attr) = @_;\n    $self->[_Doc]->getDefaultAttrValue ($self->[_TagName], $attr);\n}\n\nsub dispose\n{\n    my $self = shift;\n\n    $self->[_A]->dispose if defined $self->[_A];\n    $self->SUPER::dispose;\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    $self->SUPER::setOwnerDocument ($doc);\n\n    $self->[_A]->setOwnerDocument ($doc) if defined $self->[_A];\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;    \n\n    my $name = $self->[_TagName];\n\n    $FILE->print (\"<$name\");\n\n    if (defined $self->[_A])\n    {\n\tfor my $att (@{$self->[_A]->getValues})\n\t{\n\t    # skip un-specified (default) Attr nodes\n\t    if ($att->isSpecified)\n\t    {\n\t\t$FILE->print (\" \");\n\t\t$att->print ($FILE);\n\t    }\n\t}\n    }\n\n    my @kids = @{$self->[_C]};\n    if (@kids > 0)\n    {\n\t$FILE->print (\">\");\n\tfor my $kid (@kids)\n\t{\n\t    $kid->print ($FILE);\n\t}\n\t$FILE->print (\"</$name>\");\n    }\n    else\n    {\n\tmy $style = &$XML::DOM::TagStyle ($name, $self);\n\tif ($style == 0)\n\t{\n\t    $FILE->print (\"/>\");\n\t}\n\telsif ($style == 1)\n\t{\n\t    $FILE->print (\"></$name>\");\n\t}\n\telse\n\t{\n\t    $FILE->print (\" />\");\n\t}\n    }\n}\n\nsub check\n{\n    my ($self, $checker) = @_;\n    die \"Usage: \\$xml_dom_elem->check (\\$checker)\" unless $checker; \n\n    $checker->InitDomElem;\n    $self->to_expat ($checker);\n    $checker->FinalDomElem;\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n\n    my $tag = $self->getTagName;\n    $iter->Start ($tag);\n\n    if (defined $self->[_A])\n    {\n\tfor my $attr ($self->[_A]->getValues)\n\t{\n\t    $iter->Attr ($tag, $attr->getName, $attr->getValue, $attr->isSpecified);\n\t}\n    }\n\n    $iter->EndAttr;\n\n    for my $kid ($self->getChildNodes)\n    {\n\t$kid->to_expat ($iter);\n    }\n\n    $iter->End;\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n\n    my $tag = $self->getTagName;\n\n    my @attr = ();\n    my $attrOrder;\n    my $attrDefaulted;\n\n    if (defined $self->[_A])\n    {\n\tmy @spec = ();\t\t# names of specified attributes\n\tmy @unspec = ();\t# names of defaulted attributes\n\n\tfor my $attr ($self->[_A]->getValues) \n\t{\n\t    my $attrName = $attr->getName;\n\t    push @attr, $attrName, $attr->getValue;\n\t    if ($attr->isSpecified)\n\t    {\n\t\tpush @spec, $attrName;\n\t    }\n\t    else\n\t    {\n\t\tpush @unspec, $attrName;\n\t    }\n\t}\n\t$attrOrder = [ @spec, @unspec ];\n\t$attrDefaulted = @spec;\n    }\n    $doch->start_element (defined $attrOrder ? \n\t\t\t  { Name => $tag, \n\t\t\t    Attributes => { @attr },\n\t\t\t    AttributeOrder => $attrOrder,\n\t\t\t    Defaulted => $attrDefaulted\n\t\t\t  } :\n\t\t\t  { Name => $tag, \n\t\t\t    Attributes => { @attr } \n\t\t\t  }\n\t\t\t );\n\n    for my $kid ($self->getChildNodes)\n    {\n\t$kid->_to_sax ($doch, $dtdh, $enth);\n    }\n\n    $doch->end_element ( { Name => $tag } );\n}\n\n######################################################################\npackage XML::DOM::CharacterData;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Data\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\n\n#\n# CharacterData nodes should never be created directly, only subclassed!\n#\nsub new\n{\n    my ($class, $doc, $data) = @_;\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_Data] = $data;\n    $self;\n}\n\nsub appendData\n{\n    my ($self, $data) = @_;\n\n    if ($XML::DOM::SafeMode)\n    {\n\tcroak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t\t  \"node is ReadOnly\")\n\t    if $self->isReadOnly;\n    }\n    $self->[_Data] .= $data;\n}\n\nsub deleteData\n{\n    my ($self, $offset, $count) = @_;\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"bad offset [$offset]\")\n\tif ($offset < 0 || $offset >= length ($self->[_Data]));\n#?? DOM Spec says >, but >= makes more sense!\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"negative count [$count]\")\n\tif $count < 0;\n \n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    substr ($self->[_Data], $offset, $count) = \"\";\n}\n\nsub getData\n{\n    $_[0]->[_Data];\n}\n\nsub getLength\n{\n    length $_[0]->[_Data];\n}\n\nsub insertData\n{\n    my ($self, $offset, $data) = @_;\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"bad offset [$offset]\")\n\tif ($offset < 0 || $offset >= length ($self->[_Data]));\n#?? DOM Spec says >, but >= makes more sense!\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    substr ($self->[_Data], $offset, 0) = $data;\n}\n\nsub replaceData\n{\n    my ($self, $offset, $count, $data) = @_;\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"bad offset [$offset]\")\n\tif ($offset < 0 || $offset >= length ($self->[_Data]));\n#?? DOM Spec says >, but >= makes more sense!\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"negative count [$count]\")\n\tif $count < 0;\n \n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    substr ($self->[_Data], $offset, $count) = $data;\n}\n\nsub setData\n{\n    my ($self, $data) = @_;\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    $self->[_Data] = $data;\n}\n\nsub substringData\n{\n    my ($self, $offset, $count) = @_;\n    my $data = $self->[_Data];\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"bad offset [$offset]\")\n\tif ($offset < 0 || $offset >= length ($data));\n#?? DOM Spec says >, but >= makes more sense!\n\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"negative count [$count]\")\n\tif $count < 0;\n    \n    substr ($data, $offset, $count);\n}\n\nsub getNodeValue\n{\n    $_[0]->getData;\n}\n\nsub setNodeValue\n{\n    $_[0]->setData ($_[1]);\n}\n\n######################################################################\npackage XML::DOM::CDATASection;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::CharacterData qw( :DEFAULT :Fields );\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"\", \"XML::DOM::CharacterData\");\n}\n\nuse XML::DOM::DOMException;\n\nsub getNodeName\n{\n    \"#cdata-section\";\n}\n\nsub getNodeType\n{\n    CDATA_SECTION_NODE;\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createCDATASection ($self->getData);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n    $FILE->print (\"<![CDATA[\");\n    $FILE->print (XML::DOM::encodeCDATA ($self->getData));\n    $FILE->print (\"]]>\");\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->CData ($self->getData);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $doch->start_cdata;\n    $doch->characters ( { Data => $self->getData } );\n    $doch->end_cdata;\n}\n\n######################################################################\npackage XML::DOM::Comment;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::CharacterData qw( :DEFAULT :Fields );\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"\", \"XML::DOM::CharacterData\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\n#?? setData - could check comment for double minus\n\nsub getNodeType\n{\n    COMMENT_NODE;\n}\n\nsub getNodeName\n{\n    \"#comment\";\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createComment ($self->getData);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    return 0 if $XML::DOM::IgnoreReadOnly;\n\n    my $pa = $_[0]->[_Parent];\n    defined ($pa) ? $pa->isReadOnly : 0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n    my $comment = XML::DOM::encodeComment ($self->[_Data]);\n\n    $FILE->print (\"<!--$comment-->\");\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->Comment ($self->getData);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $doch->comment ( { Data => $self->getData });\n}\n\n######################################################################\npackage XML::DOM::Text;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::CharacterData qw( :DEFAULT :Fields );\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"\", \"XML::DOM::CharacterData\");\n}\n\nuse XML::DOM::DOMException;\nuse Carp;\n\nsub getNodeType\n{\n    TEXT_NODE;\n}\n\nsub getNodeName\n{\n    \"#text\";\n}\n\nsub splitText\n{\n    my ($self, $offset) = @_;\n\n    my $data = $self->getData;\n    croak new XML::DOM::DOMException (INDEX_SIZE_ERR,\n\t\t\t\t      \"bad offset [$offset]\")\n\tif ($offset < 0 || $offset >= length ($data));\n#?? DOM Spec says >, but >= makes more sense!\n\n    croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,\n\t\t\t\t      \"node is ReadOnly\")\n\tif $self->isReadOnly;\n\n    my $rest = substr ($data, $offset);\n\n    $self->setData (substr ($data, 0, $offset));\n    my $node = $self->[_Doc]->createTextNode ($rest);\n\n    # insert new node after this node\n    $self->[_Parent]->insertBefore ($node, $self->getNextSibling);\n\n    $node;\n}\n\nsub cloneNode\n{\n    my $self = shift;\n    $self->[_Doc]->createTextNode ($self->getData);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n    $FILE->print (XML::DOM::encodeText ($self->getData, '<&>\"'));\n}\n\nsub isTextNode\n{\n    1;\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->Char ($self->getData);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $doch->characters ( { Data => $self->getData } );\n}\n\n######################################################################\npackage XML::DOM::XMLDecl;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Version Encoding Standalone\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\n\n\n#------------------------------------------------------------\n# Extra method implementations\n\n# XMLDecl is not part of the DOM Spec\nsub new\n{\n    my ($class, $doc, $version, $encoding, $standalone) = @_;\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_Version] = $version if defined $version;\n    $self->[_Encoding] = $encoding if defined $encoding;\n    $self->[_Standalone] = $standalone if defined $standalone;\n\n    $self;\n}\n\nsub setVersion\n{\n    if (defined $_[1])\n    {\n\t$_[0]->[_Version] = $_[1];\n    }\n    else\n    {\n\tundef $_[0]->[_Version]; # was delete\n    }\n}\n\nsub getVersion\n{\n    $_[0]->[_Version];\n}\n\nsub setEncoding\n{\n    if (defined $_[1])\n    {\n\t$_[0]->[_Encoding] = $_[1];\n    }\n    else\n    {\n\tundef $_[0]->[_Encoding]; # was delete\n    }\n}\n\nsub getEncoding\n{\n    $_[0]->[_Encoding];\n}\n\nsub setStandalone\n{\n    if (defined $_[1])\n    {\n\t$_[0]->[_Standalone] = $_[1];\n    }\n    else\n    {\n\tundef $_[0]->[_Standalone]; # was delete\n    }\n}\n\nsub getStandalone\n{\n    $_[0]->[_Standalone];\n}\n\nsub getNodeType\n{\n    XML_DECL_NODE;\n}\n\nsub cloneNode\n{\n    my $self = shift;\n\n    new XML::DOM::XMLDecl ($self->[_Doc], $self->[_Version], \n\t\t\t   $self->[_Encoding], $self->[_Standalone]);\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n\n    my $version = $self->[_Version];\n    my $encoding = $self->[_Encoding];\n    my $standalone = $self->[_Standalone];\n    $standalone = ($standalone ? \"yes\" : \"no\") if defined $standalone;\n\n    $FILE->print (\"<?xml\");\n    $FILE->print (\" version=\\\"$version\\\"\")\t if defined $version;    \n    $FILE->print (\" encoding=\\\"$encoding\\\"\")\t if defined $encoding;\n    $FILE->print (\" standalone=\\\"$standalone\\\"\") if defined $standalone;\n    $FILE->print (\"?>\");\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n    $iter->XMLDecl ($self->getVersion, $self->getEncoding, $self->getStandalone);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n    $dtdh->xml_decl ( { Version => $self->getVersion, \n\t\t\tEncoding => $self->getEncoding, \n\t\t\tStandalone => $self->getStandalone } );\n}\n\n######################################################################\npackage XML::DOM::DocumentFragment;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\n\nsub new\n{\n    my ($class, $doc) = @_;\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_C] = new XML::DOM::NodeList;\n    $self;\n}\n\nsub getNodeType\n{\n    DOCUMENT_FRAGMENT_NODE;\n}\n\nsub getNodeName\n{\n    \"#document-fragment\";\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n    my $node = $self->[_Doc]->createDocumentFragment;\n\n    $node->cloneChildren ($self, $deep);\n    $node;\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n\n    for my $node (@{$self->[_C]})\n    {\n\t$node->print ($FILE);\n    }\n}\n\nsub rejectChild\n{\n    my $t = $_[1]->getNodeType;\n\n    $t != TEXT_NODE\n\t&& $t != ENTITY_REFERENCE_NODE \n\t&& $t != PROCESSING_INSTRUCTION_NODE\n\t&& $t != COMMENT_NODE\n\t&& $t != CDATA_SECTION_NODE\n\t&& $t != ELEMENT_NODE;\n}\n\nsub isDocumentFragmentNode\n{\n    1;\n}\n\n######################################################################\npackage XML::DOM::DocumentType;\t\t# forward declaration\n######################################################################\n\n######################################################################\npackage XML::DOM::Document;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    XML::DOM::def_fields (\"Doctype XmlDecl\", \"XML::DOM::Node\");\n}\n\nuse Carp;\nuse XML::DOM::NodeList;\nuse XML::DOM::DOMException;\n\nsub new\n{\n    my ($class) = @_;\n    my $self = bless [], $class;\n\n    # keep Doc pointer, even though getOwnerDocument returns undef\n    $self->[_Doc] = $self;\n    $self->[_C] = new XML::DOM::NodeList;\n    $self;\n}\n\nsub getNodeType\n{\n    DOCUMENT_NODE;\n}\n\nsub getNodeName\n{\n    \"#document\";\n}\n\n#?? not sure about keeping a fixed order of these nodes....\nsub getDoctype\n{\n    $_[0]->[_Doctype];\n}\n\nsub getDocumentElement\n{\n    my ($self) = @_;\n    for my $kid (@{$self->[_C]})\n    {\n\treturn $kid if $kid->isElementNode;\n    }\n    undef;\n}\n\nsub getOwnerDocument\n{\n    undef;\n}\n\nsub getImplementation \n{\n    $XML::DOM::DOMImplementation::Singleton;\n}\n\n#\n# Added extra parameters ($val, $specified) that are passed straight to the\n# Attr constructor\n# \nsub createAttribute\n{\n    new XML::DOM::Attr (@_);\n}\n\nsub createCDATASection\n{\n    new XML::DOM::CDATASection (@_);\n}\n\nsub createComment\n{\n    new XML::DOM::Comment (@_);\n\n}\n\nsub createElement\n{\n    new XML::DOM::Element (@_);\n}\n\nsub createTextNode\n{\n    new XML::DOM::Text (@_);\n}\n\nsub createProcessingInstruction\n{\n    new XML::DOM::ProcessingInstruction (@_);\n}\n\nsub createEntityReference\n{\n    new XML::DOM::EntityReference (@_);\n}\n\nsub createDocumentFragment\n{\n    new XML::DOM::DocumentFragment (@_);\n}\n\nsub createDocumentType\n{\n    new XML::DOM::DocumentType (@_);\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n    my $node = new XML::DOM::Document;\n\n    $node->cloneChildren ($self, $deep);\n\n    my $xmlDecl = $self->[_XmlDecl];\n    $node->[_XmlDecl] = $xmlDecl->cloneNode ($deep) if defined $xmlDecl;\n\n    $node;\n}\n\nsub appendChild\n{\n    my ($self, $node) = @_;\n\n    # Extra check: make sure we don't end up with more than one Element.\n    # Don't worry about multiple DocType nodes, because DocumentFragment\n    # can't contain DocType nodes.\n\n    my @nodes = ($node);\n    @nodes = @{$node->[_C]}\n        if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;\n    \n    my $elem = 0;\n    for my $n (@nodes)\n    {\n\t$elem++ if $n->isElementNode;\n    }\n    \n    if ($elem > 0 && defined ($self->getDocumentElement))\n    {\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"document can have only one Element\");\n    }\n    $self->SUPER::appendChild ($node);\n}\n\nsub insertBefore\n{\n    my ($self, $node, $refNode) = @_;\n\n    # Extra check: make sure sure we don't end up with more than 1 Elements.\n    # Don't worry about multiple DocType nodes, because DocumentFragment\n    # can't contain DocType nodes.\n\n    my @nodes = ($node);\n    @nodes = @{$node->[_C]}\n\tif $node->getNodeType == DOCUMENT_FRAGMENT_NODE;\n    \n    my $elem = 0;\n    for my $n (@nodes)\n    {\n\t$elem++ if $n->isElementNode;\n    }\n    \n    if ($elem > 0 && defined ($self->getDocumentElement))\n    {\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"document can have only one Element\");\n    }\n    $self->SUPER::insertBefore ($node, $refNode);\n}\n\nsub replaceChild\n{\n    my ($self, $node, $refNode) = @_;\n\n    # Extra check: make sure sure we don't end up with more than 1 Elements.\n    # Don't worry about multiple DocType nodes, because DocumentFragment\n    # can't contain DocType nodes.\n\n    my @nodes = ($node);\n    @nodes = @{$node->[_C]}\n\tif $node->getNodeType == DOCUMENT_FRAGMENT_NODE;\n    \n    my $elem = 0;\n    $elem-- if $refNode->isElementNode;\n\n    for my $n (@nodes)\n    {\n\t$elem++ if $n->isElementNode;\n    }\n    \n    if ($elem > 0 && defined ($self->getDocumentElement))\n    {\n\tcroak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,\n\t\t\t\t\t  \"document can have only one Element\");\n    }\n    $self->SUPER::replaceChild ($node, $refNode);\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub isReadOnly\n{\n    0;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n\n    my $xmlDecl = $self->getXMLDecl;\n    if (defined $xmlDecl)\n    {\n\t$xmlDecl->print ($FILE);\n\t$FILE->print (\"\\x0A\");\n    }\n\n    for my $node (@{$self->[_C]})\n    {\n\t$node->print ($FILE);\n\t$FILE->print (\"\\x0A\");\n    }\n}\n\nsub setDoctype\n{\n    my ($self, $doctype) = @_;\n    my $oldDoctype = $self->[_Doctype];\n    if (defined $oldDoctype)\n    {\n\t$self->replaceChild ($doctype, $oldDoctype);\n    }\n    else\n    {\n#?? before root element, but after XmlDecl !\n\t$self->appendChild ($doctype);\n    }\n    $_[0]->[_Doctype] = $_[1];\n}\n\nsub removeDoctype\n{\n    my $self = shift;\n    my $doctype = $self->removeChild ($self->[_Doctype]);\n\n    undef $self->[_Doctype]; # was delete\n    $doctype;\n}\n\nsub rejectChild\n{\n    my $t = $_[1]->getNodeType;\n    $t != ELEMENT_NODE\n\t&& $t != PROCESSING_INSTRUCTION_NODE\n\t&& $t != COMMENT_NODE\n\t&& $t != DOCUMENT_TYPE_NODE;\n}\n\nsub expandEntity\n{\n    my ($self, $ent, $param) = @_;\n    my $doctype = $self->getDoctype;\n\n    (defined $doctype) ? $doctype->expandEntity ($ent, $param) : undef;\n}\n\nsub getDefaultAttrValue\n{\n    my ($self, $elem, $attr) = @_;\n    \n    my $doctype = $self->getDoctype;\n\n    (defined $doctype) ? $doctype->getDefaultAttrValue ($elem, $attr) : undef;\n}\n\nsub getEntity\n{\n    my ($self, $entity) = @_;\n    \n    my $doctype = $self->getDoctype;\n\n    (defined $doctype) ? $doctype->getEntity ($entity) : undef;\n}\n\nsub dispose\n{\n    my $self = shift;\n\n    $self->[_XmlDecl]->dispose if defined $self->[_XmlDecl];\n    undef $self->[_XmlDecl]; # was delete\n    undef $self->[_Doctype]; # was delete\n    $self->SUPER::dispose;\n}\n\nsub setOwnerDocument\n{\n    # Do nothing, you can't change the owner document!\n#?? could throw exception...\n}\n\nsub getXMLDecl\n{\n    $_[0]->[_XmlDecl];\n}\n\nsub setXMLDecl\n{\n    $_[0]->[_XmlDecl] = $_[1];\n}\n\nsub createXMLDecl\n{\n    new XML::DOM::XMLDecl (@_);\n}\n\nsub createNotation\n{\n    new XML::DOM::Notation (@_);\n}\n\nsub createElementDecl\n{\n    new XML::DOM::ElementDecl (@_);\n}\n\nsub createAttlistDecl\n{\n    new XML::DOM::AttlistDecl (@_);\n}\n\nsub createEntity\n{\n    new XML::DOM::Entity (@_);\n}\n\nsub createChecker\n{\n    my $self = shift;\n    my $checker = XML::Checker->new;\n\n    $checker->Init;\n    my $doctype = $self->getDoctype;\n    $doctype->to_expat ($checker) if $doctype;\n    $checker->Final;\n\n    $checker;\n}\n\nsub check\n{\n    my ($self, $checker) = @_;\n    $checker ||= XML::Checker->new;\n\n    $self->to_expat ($checker);\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n\n    $iter->Init;\n\n    for my $kid ($self->getChildNodes)\n    {\n\t$kid->to_expat ($iter);\n    }\n    $iter->Final;\n}\n\nsub check_sax\n{\n    my ($self, $checker) = @_;\n    $checker ||= XML::Checker->new;\n\n    $self->to_sax (Handler => $checker);\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n\n    $doch->start_document;\n\n    for my $kid ($self->getChildNodes)\n    {\n\t$kid->_to_sax ($doch, $dtdh, $enth);\n    }\n    $doch->end_document;\n}\n\n######################################################################\npackage XML::DOM::DocumentType;\n######################################################################\nuse vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };\n\nBEGIN\n{\n    import XML::DOM::Node qw( :DEFAULT :Fields );\n    import XML::DOM::Document qw( :Fields );\n    XML::DOM::def_fields (\"Entities Notations Name SysId PubId Internal\", \"XML::DOM::Node\");\n}\n\nuse XML::DOM::DOMException;\nuse XML::DOM::NamedNodeMap;\n\nsub new\n{\n    my $class = shift;\n    my $doc = shift;\n\n    my $self = bless [], $class;\n\n    $self->[_Doc] = $doc;\n    $self->[_ReadOnly] = 1;\n    $self->[_C] = new XML::DOM::NodeList;\n\n    $self->[_Entities] =  new XML::DOM::NamedNodeMap (Doc\t=> $doc,\n\t\t\t\t\t\t      Parent\t=> $self,\n\t\t\t\t\t\t      ReadOnly\t=> 1);\n    $self->[_Notations] = new XML::DOM::NamedNodeMap (Doc\t=> $doc,\n\t\t\t\t\t\t      Parent\t=> $self,\n\t\t\t\t\t\t      ReadOnly\t=> 1);\n    $self->setParams (@_);\n    $self;\n}\n\nsub getNodeType\n{\n    DOCUMENT_TYPE_NODE;\n}\n\nsub getNodeName\n{\n    $_[0]->[_Name];\n}\n\nsub getName\n{\n    $_[0]->[_Name];\n}\n\nsub getEntities\n{\n    $_[0]->[_Entities];\n}\n\nsub getNotations\n{\n    $_[0]->[_Notations];\n}\n\nsub setParentNode\n{\n    my ($self, $parent) = @_;\n    $self->SUPER::setParentNode ($parent);\n\n    $parent->[_Doctype] = $self \n\tif $parent->getNodeType == DOCUMENT_NODE;\n}\n\nsub cloneNode\n{\n    my ($self, $deep) = @_;\n\n    my $node = new XML::DOM::DocumentType ($self->[_Doc], $self->[_Name], \n\t\t\t\t\t   $self->[_SysId], $self->[_PubId], \n\t\t\t\t\t   $self->[_Internal]);\n\n#?? does it make sense to make a shallow copy?\n\n    # clone the NamedNodeMaps\n    $node->[_Entities] = $self->[_Entities]->cloneNode ($deep);\n\n    $node->[_Notations] = $self->[_Notations]->cloneNode ($deep);\n\n    $node->cloneChildren ($self, $deep);\n\n    $node;\n}\n\n#------------------------------------------------------------\n# Extra method implementations\n\nsub getSysId\n{\n    $_[0]->[_SysId];\n}\n\nsub getPubId\n{\n    $_[0]->[_PubId];\n}\n\nsub getInternal\n{\n    $_[0]->[_Internal];\n}\n\nsub setSysId\n{\n    $_[0]->[_SysId] = $_[1];\n}\n\nsub setPubId\n{\n    $_[0]->[_PubId] = $_[1];\n}\n\nsub setInternal\n{\n    $_[0]->[_Internal] = $_[1];\n}\n\nsub setName\n{\n    $_[0]->[_Name] = $_[1];\n}\n\nsub removeChildHoodMemories\n{\n    my ($self, $dontWipeReadOnly) = @_;\n\n    my $parent = $self->[_Parent];\n    if (defined $parent && $parent->getNodeType == DOCUMENT_NODE)\n    {\n\tundef $parent->[_Doctype]; # was delete\n    }\n    $self->SUPER::removeChildHoodMemories;\n}\n\nsub dispose\n{\n    my $self = shift;\n\n    $self->[_Entities]->dispose;\n    $self->[_Notations]->dispose;\n    $self->SUPER::dispose;\n}\n\nsub setOwnerDocument\n{\n    my ($self, $doc) = @_;\n    $self->SUPER::setOwnerDocument ($doc);\n\n    $self->[_Entities]->setOwnerDocument ($doc);\n    $self->[_Notations]->setOwnerDocument ($doc);\n}\n\nsub expandEntity\n{\n    my ($self, $ent, $param) = @_;\n\n    my $kid = $self->[_Entities]->getNamedItem ($ent);\n    return $kid->getValue\n\tif (defined ($kid) && $param == $kid->isParameterEntity);\n\n    undef;\t# entity not found\n}\n\nsub getAttlistDecl\n{\n    my ($self, $elemName) = @_;\n    for my $kid (@{$_[0]->[_C]})\n    {\n\treturn $kid if ($kid->getNodeType == ATTLIST_DECL_NODE &&\n\t\t\t$kid->getName eq $elemName);\n    }\n    undef;\t# not found\n}\n\nsub getElementDecl\n{\n    my ($self, $elemName) = @_;\n    for my $kid (@{$_[0]->[_C]})\n    {\n\treturn $kid if ($kid->getNodeType == ELEMENT_DECL_NODE &&\n\t\t\t$kid->getName eq $elemName);\n    }\n    undef;\t# not found\n}\n\nsub addElementDecl\n{\n    my ($self, $name, $model, $hidden) = @_;\n    my $node = $self->getElementDecl ($name);\n\n#?? could warn\n    unless (defined $node)\n    {\n\t$node = $self->[_Doc]->createElementDecl ($name, $model, $hidden);\n\t$self->appendChild ($node);\n    }\n    $node;\n}\n\nsub addAttlistDecl\n{\n    my ($self, $name) = @_;\n    my $node = $self->getAttlistDecl ($name);\n\n    unless (defined $node)\n    {\n\t$node = $self->[_Doc]->createAttlistDecl ($name);\n\t$self->appendChild ($node);\n    }\n    $node;\n}\n\nsub addNotation\n{\n    my $self = shift;\n    my $node = $self->[_Doc]->createNotation (@_);\n    $self->[_Notations]->setNamedItem ($node);\n    $node;\n}\n\nsub addEntity\n{\n    my $self = shift;\n    my $node = $self->[_Doc]->createEntity (@_);\n\n    $self->[_Entities]->setNamedItem ($node);\n    $node;\n}\n\n# All AttDefs for a certain Element are merged into a single ATTLIST\nsub addAttDef\n{\n    my $self = shift;\n    my $elemName = shift;\n\n    # create the AttlistDecl if it doesn't exist yet\n    my $attListDecl = $self->addAttlistDecl ($elemName);\n    $attListDecl->addAttDef (@_);\n}\n\nsub getDefaultAttrValue\n{\n    my ($self, $elem, $attr) = @_;\n    my $elemNode = $self->getAttlistDecl ($elem);\n    (defined $elemNode) ? $elemNode->getDefaultAttrValue ($attr) : undef;\n}\n\nsub getEntity\n{\n    my ($self, $entity) = @_;\n    $self->[_Entities]->getNamedItem ($entity);\n}\n\nsub setParams\n{\n    my ($self, $name, $sysid, $pubid, $internal) = @_;\n\n    $self->[_Name] = $name;\n\n#?? not sure if we need to hold on to these...\n    $self->[_SysId] = $sysid if defined $sysid;\n    $self->[_PubId] = $pubid if defined $pubid;\n    $self->[_Internal] = $internal if defined $internal;\n\n    $self;\n}\n\nsub rejectChild\n{\n    # DOM Spec says: DocumentType -- no children\n    not $XML::DOM::IgnoreReadOnly;\n}\n\nsub print\n{\n    my ($self, $FILE) = @_;\n\n    my $name = $self->[_Name];\n\n    my $sysId = $self->[_SysId];\n    my $pubId = $self->[_PubId];\n\n    $FILE->print (\"<!DOCTYPE $name\");\n    if (defined $pubId)\n    {\n\t$FILE->print (\" PUBLIC \\\"$pubId\\\" \\\"$sysId\\\"\");\n    }\n    elsif (defined $sysId)\n    {\n\t$FILE->print (\" SYSTEM \\\"$sysId\\\"\");\n    }\n\n    my @entities = @{$self->[_Entities]->getValues};\n    my @notations = @{$self->[_Notations]->getValues};\n    my @kids = @{$self->[_C]};\n\n    if (@entities || @notations || @kids)\n    {\n\t$FILE->print (\" [\\x0A\");\n\n\tfor my $kid (@entities)\n\t{\n\t    next if $kid->[_Hidden];\n\n\t    $FILE->print (\" \");\n\t    $kid->print ($FILE);\n\t    $FILE->print (\"\\x0A\");\n\t}\n\n\tfor my $kid (@notations)\n\t{\n\t    next if $kid->[_Hidden];\n\n\t    $FILE->print (\" \");\n\t    $kid->print ($FILE);\n\t    $FILE->print (\"\\x0A\");\n\t}\n\n\tfor my $kid (@kids)\n\t{\n\t    next if $kid->[_Hidden];\n\n\t    $FILE->print (\" \");\n\t    $kid->print ($FILE);\n\t    $FILE->print (\"\\x0A\");\n\t}\n\t$FILE->print (\"]\");\n    }\n    $FILE->print (\">\");\n}\n\nsub to_expat\n{\n    my ($self, $iter) = @_;\n\n    $iter->Doctype ($self->getName, $self->getSysId, $self->getPubId, $self->getInternal);\n\n    for my $ent ($self->getEntities->getValues)\n    {\n\tnext if $ent->[_Hidden];\n\t$ent->to_expat ($iter);\n    }\n\n    for my $nota ($self->getNotations->getValues)\n    {\n\tnext if $nota->[_Hidden];\n\t$nota->to_expat ($iter);\n    }\n\n    for my $kid ($self->getChildNodes)\n    {\n\tnext if $kid->[_Hidden];\n\t$kid->to_expat ($iter);\n    }\n}\n\nsub _to_sax\n{\n    my ($self, $doch, $dtdh, $enth) = @_;\n\n    $dtdh->doctype_decl ( { Name => $self->getName, \n\t\t\t    SystemId => $self->getSysId, \n\t\t\t    PublicId => $self->getPubId, \n\t\t\t    Internal => $self->getInternal });\n\n    for my $ent ($self->getEntities->getValues)\n    {\n\tnext if $ent->[_Hidden];\n\t$ent->_to_sax ($doch, $dtdh, $enth);\n    }\n\n    for my $nota ($self->getNotations->getValues)\n    {\n\tnext if $nota->[_Hidden];\n\t$nota->_to_sax ($doch, $dtdh, $enth);\n    }\n\n    for my $kid ($self->getChildNodes)\n    {\n\tnext if $kid->[_Hidden];\n\t$kid->_to_sax ($doch, $dtdh, $enth);\n    }\n}\n\n######################################################################\npackage XML::DOM::Parser;\n######################################################################\nuse vars qw ( @ISA );\n@ISA = qw( XML::Parser );\n\nsub new\n{\n    my ($class, %args) = @_;\n\n    $args{Style} = 'XML::Parser::Dom';\n    $class->SUPER::new (%args);\n}\n\n# This method needed to be overriden so we can restore some global \n# variables when an exception is thrown\nsub parse\n{\n    my $self = shift;\n\n    local $XML::Parser::Dom::_DP_doc;\n    local $XML::Parser::Dom::_DP_elem;\n    local $XML::Parser::Dom::_DP_doctype;\n    local $XML::Parser::Dom::_DP_in_prolog;\n    local $XML::Parser::Dom::_DP_end_doc;\n    local $XML::Parser::Dom::_DP_saw_doctype;\n    local $XML::Parser::Dom::_DP_in_CDATA;\n    local $XML::Parser::Dom::_DP_keep_CDATA;\n    local $XML::Parser::Dom::_DP_last_text;\n\n\n    # Temporarily disable checks that Expat already does (for performance)\n    local $XML::DOM::SafeMode = 0;\n    # Temporarily disable ReadOnly checks\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    my $ret;\n    eval {\n\t$ret = $self->SUPER::parse (@_);\n    };\n    my $err = $@;\n\n    if ($err)\n    {\n\tmy $doc = $XML::Parser::Dom::_DP_doc;\n\tif ($doc)\n\t{\n\t    $doc->dispose;\n\t}\n\tdie $err;\n    }\n\n    $ret;\n}\n\nmy $LWP_USER_AGENT;\nsub set_LWP_UserAgent\n{\n    $LWP_USER_AGENT = shift;\n}\n\nsub parsefile\n{\n    my $self = shift;\n    my $url = shift;\n\n    # Any other URL schemes?\n    if ($url =~ /^(https?|ftp|wais|gopher|file):/)\n    {\n\t# Read the file from the web with LWP.\n\t#\n\t# Note that we read in the entire file, which may not be ideal\n\t# for large files. LWP::UserAgent also provides a callback style\n\t# request, which we could convert to a stream with a fork()...\n\n\tmy $result;\n\teval\n\t{\n\t    use LWP::UserAgent;\n\n\t    my $ua = $self->{LWP_UserAgent};\n\t    unless (defined $ua)\n\t    {\n\t\tunless (defined $LWP_USER_AGENT)\n\t\t{\n\t\t    $LWP_USER_AGENT = LWP::UserAgent->new;\n\n\t\t    # Load proxy settings from environment variables, i.e.:\n\t\t    # http_proxy, ftp_proxy, no_proxy etc. (see LWP::UserAgent(3))\n\t\t    # You need these to go thru firewalls.\n\t\t    $LWP_USER_AGENT->env_proxy;\n\t\t}\n\t\t$ua = $LWP_USER_AGENT;\n\t    }\n\t    my $req = new HTTP::Request 'GET', $url;\n\t    my $response = $ua->request ($req);\n\n\t    # Parse the result of the HTTP request\n\t    $result = $self->parse ($response->content, @_);\n\t};\n\tif ($@)\n\t{\n\t    die \"Couldn't parsefile [$url] with LWP: $@\";\n\t}\n\treturn $result;\n    }\n    else\n    {\n\treturn $self->SUPER::parsefile ($url, @_);\n    }\n}\n\n######################################################################\npackage XML::Parser::Dom;\n######################################################################\n\nBEGIN\n{\n    import XML::DOM::Node qw( :Fields );\n    import XML::DOM::CharacterData qw( :Fields );\n}\n\nuse vars qw( $_DP_doc\n\t     $_DP_elem\n\t     $_DP_doctype\n\t     $_DP_in_prolog\n\t     $_DP_end_doc\n\t     $_DP_saw_doctype\n\t     $_DP_in_CDATA\n\t     $_DP_keep_CDATA\n\t     $_DP_last_text\n\t     $_DP_level\n\t     $_DP_expand_pent\n\t   );\n\n# This adds a new Style to the XML::Parser class.\n# From now on you can say: $parser = new XML::Parser ('Style' => 'Dom' );\n# but that is *NOT* how a regular user should use it!\n$XML::Parser::Built_In_Styles{Dom} = 1;\n\nsub Init\n{\n    $_DP_elem = $_DP_doc = new XML::DOM::Document();\n    $_DP_doctype = new XML::DOM::DocumentType ($_DP_doc);\n    $_DP_doc->setDoctype ($_DP_doctype);\n    $_DP_keep_CDATA = $_[0]->{KeepCDATA};\n\n    # Prepare for document prolog\n    $_DP_in_prolog = 1;\n\n    # We haven't passed the root element yet\n    $_DP_end_doc = 0;\n\n    # Expand parameter entities in the DTD by default\n\n    $_DP_expand_pent = defined $_[0]->{ExpandParamEnt} ? \n\t\t\t\t\t$_[0]->{ExpandParamEnt} : 1;\n    if ($_DP_expand_pent)\n    {\n\t$_[0]->{DOM_Entity} = {};\n    }\n\n    $_DP_level = 0;\n\n    undef $_DP_last_text;\n}\n\nsub Final\n{\n    unless ($_DP_saw_doctype)\n    {\n\tmy $doctype = $_DP_doc->removeDoctype;\n\t$doctype->dispose;\n    }\n    $_DP_doc;\n}\n\nsub Char\n{\n    my $str = $_[1];\n\n    if ($_DP_in_CDATA && $_DP_keep_CDATA)\n    {\n\tundef $_DP_last_text;\n\t# Merge text with previous node if possible\n\t$_DP_elem->addCDATA ($str);\n    }\n    else\n    {\n\t# Merge text with previous node if possible\n\t# Used to be:\t$expat->{DOM_Element}->addText ($str);\n\tif ($_DP_last_text)\n\t{\n\t    $_DP_last_text->[_Data] .= $str;\n\t}\n\telse\n\t{\n\t    $_DP_last_text = $_DP_doc->createTextNode ($str);\n\t    $_DP_last_text->[_Parent] = $_DP_elem;\n\t    push @{$_DP_elem->[_C]}, $_DP_last_text;\n\t}\n    }\n}\n\nsub Start\n{\n    my ($expat, $elem, @attr) = @_;\n    my $parent = $_DP_elem;\n    my $doc = $_DP_doc;\n    \n    if ($parent == $doc)\n    {\n\t# End of document prolog, i.e. start of first Element\n\t$_DP_in_prolog = 0;\n    }\n    \n    undef $_DP_last_text;\n    my $node = $doc->createElement ($elem);\n    $_DP_elem = $node;\n    $parent->appendChild ($node);\n    \n    my $n = @attr;\n    return unless $n;\n\n    # Add attributes\n    my $first_default = $expat->specified_attr;\n    my $i = 0;\n    while ($i < $n)\n    {\n\tmy $specified = $i < $first_default;\n\tmy $name = $attr[$i++];\n\tundef $_DP_last_text;\n\tmy $attr = $doc->createAttribute ($name, $attr[$i++], $specified);\n\t$node->setAttributeNode ($attr);\n    }\n}\n\nsub End\n{\n    $_DP_elem = $_DP_elem->[_Parent];\n    undef $_DP_last_text;\n\n    # Check for end of root element\n    $_DP_end_doc = 1 if ($_DP_elem == $_DP_doc);\n}\n\n# Called at end of file, i.e. whitespace following last closing tag\n# Also for Entity references\n# May also be called at other times...\nsub Default\n{\n    my ($expat, $str) = @_;\n\n#    shift; deb (\"Default\", @_);\n\n    if ($_DP_in_prolog)\t# still processing Document prolog...\n    {\n#?? could try to store this text later\n#?? I've only seen whitespace here so far\n    }\n    elsif (!$_DP_end_doc)\t# ignore whitespace at end of Document\n    {\n#\tif ($expat->{NoExpand})\n#\t{\n\t    # Got a TextDecl (<?xml ...?>) from an external entity here once\n\n\t    # create non-parameter entity reference, correct?\n            return unless $str =~ s!^&!!;\n            return unless $str =~ s!;$!!;\n\t    $_DP_elem->appendChild (\n\t\t   $_DP_doc->createEntityReference ($str,0,$expat->{NoExpand}));\n\t    undef $_DP_last_text;\n#\t}\n#\telse\n#\t{\n#\t    $expat->{DOM_Element}->addText ($str);\n#\t}\n    }\n}\n\n# XML::Parser 2.19 added support for CdataStart and CdataEnd handlers\n# If they are not defined, the Default handler is called instead\n# with the text \"<![CDATA[\" and \"]]\"\nsub CdataStart\n{\n    $_DP_in_CDATA = 1;\n}\n\nsub CdataEnd\n{\n    $_DP_in_CDATA = 0;\n}\n\nmy $START_MARKER = \"__DOM__START__ENTITY__\";\nmy $END_MARKER = \"__DOM__END__ENTITY__\";\n\nsub Comment\n{\n    undef $_DP_last_text;\n\n    # These comments were inserted by ExternEnt handler\n    if ($_[1] =~ /(?:($START_MARKER)|($END_MARKER))/)\n    {\n\tif ($1)\t # START\n\t{\n\t    $_DP_level++;\n\t}\n\telse\n\t{\n\t    $_DP_level--;\n\t}\n    }\n    else\n    {\n\tmy $comment = $_DP_doc->createComment ($_[1]);\n\t$_DP_elem->appendChild ($comment);\n    }\n}\n\nsub deb\n{\n#    return;\n\n    my $name = shift;\n    print \"$name (\" . join(\",\", map {defined($_)?$_ : \"(undef)\"} @_) . \")\\n\";\n}\n\nsub Doctype\n{\n    my $expat = shift;\n#    deb (\"Doctype\", @_);\n\n    $_DP_doctype->setParams (@_);\n    $_DP_saw_doctype = 1;\n}\n\nsub Attlist\n{\n    my $expat = shift;\n#    deb (\"Attlist\", @_);\n\n    $_[5] = \"Hidden\" unless $_DP_expand_pent || $_DP_level == 0;\n    $_DP_doctype->addAttDef (@_);\n}\n\nsub XMLDecl\n{\n    my $expat = shift;\n#    deb (\"XMLDecl\", @_);\n\n    undef $_DP_last_text;\n    $_DP_doc->setXMLDecl (new XML::DOM::XMLDecl ($_DP_doc, @_));\n}\n\nsub Entity\n{\n    my $expat = shift;\n#    deb (\"Entity\", @_);\n    \n    # check to see if Parameter Entity\n    if ($_[5])\n    {\n\n\tif (defined $_[2])\t# was sysid specified?\n\t{\n\t    # Store the Entity mapping for use in ExternEnt\n\t    if (exists $expat->{DOM_Entity}->{$_[2]})\n\t    {\n\t\t# If this ever happens, the name of entity may be the wrong one\n\t\t# when writing out the Document.\n\t\tXML::DOM::warning (\"Entity $_[2] is known as %$_[0] and %\" .\n\t\t\t\t   $expat->{DOM_Entity}->{$_[2]});\n\t    }\n\t    else\n\t    {\n\t\t$expat->{DOM_Entity}->{$_[2]} = $_[0];\n\t    }\n\t    #?? remove this block when XML::Parser has better support\n\t}\n    }\n\n    # no value on things with sysId\n    if (defined $_[2] && defined $_[1])\n    {\n        # print STDERR \"XML::DOM Warning $_[0] had both value($_[1]) And SYSId ($_[2]), removing value.\\n\";\n        $_[1] = undef;\n    }\n\n    undef $_DP_last_text;\n\n    $_[6] = \"Hidden\" unless $_DP_expand_pent || $_DP_level == 0;\n    $_DP_doctype->addEntity (@_);\n}\n\n#\n# Unparsed is called when it encounters e.g:\n#\n#   <!ENTITY logo SYSTEM \"http://server/logo.gif\" NDATA gif>\n#\nsub Unparsed\n{\n    Entity (@_);\t# same as regular ENTITY, as far as DOM is concerned\n}\n\nsub Element\n{\n    shift;\n#    deb (\"Element\", @_);\n\n    # put in to convert XML::Parser::ContentModel object to string\n    # ($_[1] used to be a string in XML::Parser 2.27 and\n    # dom_attr.t fails if we don't stringify here)\n    $_[1] = \"$_[1]\";\n\n    undef $_DP_last_text;\n    push @_, \"Hidden\" unless $_DP_expand_pent || $_DP_level == 0;\n    $_DP_doctype->addElementDecl (@_);\n}\n\nsub Notation\n{\n    shift;\n#    deb (\"Notation\", @_);\n\n    undef $_DP_last_text;\n    $_[4] = \"Hidden\" unless $_DP_expand_pent || $_DP_level == 0;\n    $_DP_doctype->addNotation (@_);\n}\n\nsub Proc\n{\n    shift;\n#    deb (\"Proc\", @_);\n\n    undef $_DP_last_text;\n    push @_, \"Hidden\" unless $_DP_expand_pent || $_DP_level == 0;\n    $_DP_elem->appendChild ($_DP_doc->createProcessingInstruction (@_));\n}\n\n#\n# ExternEnt is called when an external entity, such as:\n#\n#\t<!ENTITY externalEntity PUBLIC \"-//Enno//TEXT Enno's description//EN\" \n#\t                        \"http://server/descr.txt\">\n#\n# is referenced in the document, e.g. with: &externalEntity;\n# If ExternEnt is not specified, the entity reference is passed to the Default\n# handler as e.g. \"&externalEntity;\", where an EntityReference object is added.\n#\n# Also for %externalEntity; references in the DTD itself.\n#\n# It can also be called when XML::Parser parses the DOCTYPE header\n# (just before calling the DocType handler), when it contains a\n# reference like \"docbook.dtd\" below:\n#\n#    <!DOCTYPE book PUBLIC \"-//Norman Walsh//DTD DocBk XML V3.1.3//EN\" \n#\t\"docbook.dtd\" [\n#     ... rest of DTD ...\n#\nsub ExternEnt\n{\n    my ($expat, $base, $sysid, $pubid) = @_;\n#    deb (\"ExternEnt\", @_);\n\n    # ?? (tjmather) i think there is a problem here\n    # with XML::Parser > 2.27 since file_ext_ent_handler\n    # now returns a IO::File object instead of a content string\n\n    # Invoke XML::Parser's default ExternEnt handler\n    my $content;\n    if ($XML::Parser::have_LWP)\n    {\n\t$content = XML::Parser::lwp_ext_ent_handler (@_);\n    }\n    else\n    {\n\t$content = XML::Parser::file_ext_ent_handler (@_);\n    }\n\n    if ($_DP_expand_pent)\n    {\n\treturn $content;\n    }\n    else\n    {\n\tmy $entname = $expat->{DOM_Entity}->{$sysid};\n\tif (defined $entname)\n\t{\n\t    $_DP_doctype->appendChild ($_DP_doc->createEntityReference ($entname, 1, $expat->{NoExpand}));\n            # Wrap the contents in special comments, so we know when we reach the\n\t    # end of parsing the entity. This way we can omit the contents from\n\t    # the DTD, when ExpandParamEnt is set to 0.\n     \n\t    return \"<!-- $START_MARKER sysid=[$sysid] -->\" .\n\t\t$content . \"<!-- $END_MARKER sysid=[$sysid] -->\";\n\t}\n\telse\n\t{\n\t    # We either read the entity ref'd by the system id in the \n\t    # <!DOCTYPE> header, or the entity was undefined.\n\t    # In either case, don't bother with maintaining the entity\n\t    # reference, just expand the contents.\n\t    return \"<!-- $START_MARKER sysid=[DTD] -->\" .\n\t\t$content . \"<!-- $END_MARKER sysid=[DTD] -->\";\n\t}\n    }\n}\n\n1; # module return code\n\n__END__\n\n=head1 NAME\n\nXML::DOM - A perl module for building DOM Level 1 compliant document structures\n\n=head1 SYNOPSIS\n\n use XML::DOM;\n\n my $parser = new XML::DOM::Parser;\n my $doc = $parser->parsefile (\"file.xml\");\n\n # print all HREF attributes of all CODEBASE elements\n my $nodes = $doc->getElementsByTagName (\"CODEBASE\");\n my $n = $nodes->getLength;\n\n for (my $i = 0; $i < $n; $i++)\n {\n     my $node = $nodes->item ($i);\n     my $href = $node->getAttributeNode (\"HREF\");\n     print $href->getValue . \"\\n\";\n }\n\n # Print doc file\n $doc->printToFile (\"out.xml\");\n\n # Print to string\n print $doc->toString;\n\n # Avoid memory leaks - cleanup circular references for garbage collection\n $doc->dispose;\n\n=head1 DESCRIPTION\n\nThis module extends the XML::Parser module by Clark Cooper. \nThe XML::Parser module is built on top of XML::Parser::Expat, \nwhich is a lower level interface to James Clark's expat library.\n\nXML::DOM::Parser is derived from XML::Parser. It parses XML strings or files\nand builds a data structure that conforms to the API of the Document Object \nModel as described at http://www.w3.org/TR/REC-DOM-Level-1.\nSee the XML::Parser manpage for other available features of the \nXML::DOM::Parser class. \nNote that the 'Style' property should not be used (it is set internally.)\n\nThe XML::Parser I<NoExpand> option is more or less supported, in that it will\ngenerate EntityReference objects whenever an entity reference is encountered\nin character data. I'm not sure how useful this is. Any comments are welcome.\n\nAs described in the synopsis, when you create an XML::DOM::Parser object, \nthe parse and parsefile methods create an I<XML::DOM::Document> object\nfrom the specified input. This Document object can then be examined, modified and\nwritten back out to a file or converted to a string.\n\nWhen using XML::DOM with XML::Parser version 2.19 and up, setting the \nXML::DOM::Parser option I<KeepCDATA> to 1 will store CDATASections in\nCDATASection nodes, instead of converting them to Text nodes.\nSubsequent CDATASection nodes will be merged into one. Let me know if this\nis a problem.\n\nWhen using XML::Parser 2.27 and above, you can suppress expansion of\nparameter entity references (e.g. %pent;) in the DTD, by setting I<ParseParamEnt>\nto 1 and I<ExpandParamEnt> to 0. See L<Hidden Nodes|/_Hidden_Nodes_> for details.\n\nA Document has a tree structure consisting of I<Node> objects. A Node may contain\nother nodes, depending on its type.\nA Document may have Element, Text, Comment, and CDATASection nodes. \nElement nodes may have Attr, Element, Text, Comment, and CDATASection nodes. \nThe other nodes may not have any child nodes. \n\nThis module adds several node types that are not part of the DOM spec (yet.)\nThese are: ElementDecl (for <!ELEMENT ...> declarations), AttlistDecl (for\n<!ATTLIST ...> declarations), XMLDecl (for <?xml ...?> declarations) and AttDef\n(for attribute definitions in an AttlistDecl.)\n\n=head1 XML::DOM Classes\n\nThe XML::DOM module stores XML documents in a tree structure with a root node\nof type XML::DOM::Document. Different nodes in tree represent different\nparts of the XML file. The DOM Level 1 Specification defines the following\nnode types:\n\n=over 4\n\n=item * L<XML::DOM::Node> - Super class of all node types\n\n=item * L<XML::DOM::Document> - The root of the XML document\n\n=item * L<XML::DOM::DocumentType> - Describes the document structure: <!DOCTYPE root [ ... ]>\n\n=item * L<XML::DOM::Element> - An XML element: <elem attr=\"val\"> ... </elem>\n\n=item * L<XML::DOM::Attr> - An XML element attribute: name=\"value\"\n\n=item * L<XML::DOM::CharacterData> - Super class of Text, Comment and CDATASection\n\n=item * L<XML::DOM::Text> - Text in an XML element\n\n=item * L<XML::DOM::CDATASection> - Escaped block of text: <![CDATA[ text ]]>\n\n=item * L<XML::DOM::Comment> - An XML comment: <!-- comment -->\n\n=item * L<XML::DOM::EntityReference> - Refers to an ENTITY: &ent; or %ent;\n\n=item * L<XML::DOM::Entity> - An ENTITY definition: <!ENTITY ...>\n\n=item * L<XML::DOM::ProcessingInstruction> - <?PI target>\n\n=item * L<XML::DOM::DocumentFragment> - Lightweight node for cut & paste\n\n=item * L<XML::DOM::Notation> - An NOTATION definition: <!NOTATION ...>\n\n=back\n\nIn addition, the XML::DOM module contains the following nodes that are not part \nof the DOM Level 1 Specification:\n\n=over 4\n\n=item * L<XML::DOM::ElementDecl> - Defines an element: <!ELEMENT ...>\n\n=item * L<XML::DOM::AttlistDecl> - Defines one or more attributes in an <!ATTLIST ...>\n\n=item * L<XML::DOM::AttDef> - Defines one attribute in an <!ATTLIST ...>\n\n=item * L<XML::DOM::XMLDecl> - An XML declaration: <?xml version=\"1.0\" ...>\n\n=back\n\nOther classes that are part of the DOM Level 1 Spec:\n\n=over 4\n\n=item * L<XML::DOM::Implementation> - Provides information about this implementation. Currently it doesn't do much.\n\n=item * L<XML::DOM::NodeList> - Used internally to store a node's child nodes. Also returned by getElementsByTagName.\n\n=item * L<XML::DOM::NamedNodeMap> - Used internally to store an element's attributes.\n\n=back\n\nOther classes that are not part of the DOM Level 1 Spec:\n\n=over 4\n\n=item * L<XML::DOM::Parser> - An non-validating XML parser that creates XML::DOM::Documents\n\n=item * L<XML::DOM::ValParser> - A validating XML parser that creates XML::DOM::Documents. It uses L<XML::Checker> to check against the DocumentType (DTD)\n\n=item * L<XML::Handler::BuildDOM> - A PerlSAX handler that creates XML::DOM::Documents.\n\n=back\n\n=head1 XML::DOM package\n\n=over 4\n\n=item Constant definitions\n\nThe following predefined constants indicate which type of node it is.\n\n=back\n\n UNKNOWN_NODE (0)                The node type is unknown (not part of DOM)\n\n ELEMENT_NODE (1)                The node is an Element.\n ATTRIBUTE_NODE (2)              The node is an Attr.\n TEXT_NODE (3)                   The node is a Text node.\n CDATA_SECTION_NODE (4)          The node is a CDATASection.\n ENTITY_REFERENCE_NODE (5)       The node is an EntityReference.\n ENTITY_NODE (6)                 The node is an Entity.\n PROCESSING_INSTRUCTION_NODE (7) The node is a ProcessingInstruction.\n COMMENT_NODE (8)                The node is a Comment.\n DOCUMENT_NODE (9)               The node is a Document.\n DOCUMENT_TYPE_NODE (10)         The node is a DocumentType.\n DOCUMENT_FRAGMENT_NODE (11)     The node is a DocumentFragment.\n NOTATION_NODE (12)              The node is a Notation.\n\n ELEMENT_DECL_NODE (13)\t\t The node is an ElementDecl (not part of DOM)\n ATT_DEF_NODE (14)\t\t The node is an AttDef (not part of DOM)\n XML_DECL_NODE (15)\t\t The node is an XMLDecl (not part of DOM)\n ATTLIST_DECL_NODE (16)\t\t The node is an AttlistDecl (not part of DOM)\n\n Usage:\n\n   if ($node->getNodeType == ELEMENT_NODE)\n   {\n       print \"It's an Element\";\n   }\n\nB<Not In DOM Spec>: The DOM Spec does not mention UNKNOWN_NODE and, \nquite frankly, you should never encounter it. The last 4 node types were added\nto support the 4 added node classes.\n\n=head2 Global Variables\n\n=over 4\n\n=item $VERSION\n\nThe variable $XML::DOM::VERSION contains the version number of this \nimplementation, e.g. \"1.43\".\n\n=back\n\n=head2 METHODS\n\nThese methods are not part of the DOM Level 1 Specification.\n\n=over 4\n\n=item getIgnoreReadOnly and ignoreReadOnly (readOnly)\n\nThe DOM Level 1 Spec does not allow you to edit certain sections of the document,\ne.g. the DocumentType, so by default this implementation throws DOMExceptions\n(i.e. NO_MODIFICATION_ALLOWED_ERR) when you try to edit a readonly node. \nThese readonly checks can be disabled by (temporarily) setting the global \nIgnoreReadOnly flag.\n\nThe ignoreReadOnly method sets the global IgnoreReadOnly flag and returns its\nprevious value. The getIgnoreReadOnly method simply returns its current value.\n\n my $oldIgnore = XML::DOM::ignoreReadOnly (1);\n eval {\n ... do whatever you want, catching any other exceptions ...\n };\n XML::DOM::ignoreReadOnly ($oldIgnore);     # restore previous value\n\nAnother way to do it, using a local variable:\n\n { # start new scope\n    local $XML::DOM::IgnoreReadOnly = 1;\n    ... do whatever you want, don't worry about exceptions ...\n } # end of scope ($IgnoreReadOnly is set back to its previous value)\n    \n\n=item isValidName (name)\n\nWhether the specified name is a valid \"Name\" as specified in the XML spec.\nCharacters with Unicode values > 127 are now also supported.\n\n=item getAllowReservedNames and allowReservedNames (boolean)\n\nThe first method returns whether reserved names are allowed. \nThe second takes a boolean argument and sets whether reserved names are allowed.\nThe initial value is 1 (i.e. allow reserved names.)\n\nThe XML spec states that \"Names\" starting with (X|x)(M|m)(L|l)\nare reserved for future use. (Amusingly enough, the XML version of the XML spec\n(REC-xml-19980210.xml) breaks that very rule by defining an ENTITY with the name \n'xmlpio'.)\nA \"Name\" in this context means the Name token as found in the BNF rules in the\nXML spec.\n\nXML::DOM only checks for errors when you modify the DOM tree, not when the\nDOM tree is built by the XML::DOM::Parser.\n\n=item setTagCompression (funcref)\n\nThere are 3 possible styles for printing empty Element tags:\n\n=over 4\n\n=item Style 0\n\n <empty/> or <empty attr=\"val\"/>\n\nXML::DOM uses this style by default for all Elements.\n\n=item Style 1\n\n  <empty></empty> or <empty attr=\"val\"></empty>\n\n=item Style 2\n\n  <empty /> or <empty attr=\"val\" />\n\nThis style is sometimes desired when using XHTML. \n(Note the extra space before the slash \"/\")\nSee L<http://www.w3.org/TR/xhtml1> Appendix C for more details.\n\n=back\n\nBy default XML::DOM compresses all empty Element tags (style 0.)\nYou can control which style is used for a particular Element by calling\nXML::DOM::setTagCompression with a reference to a function that takes\n2 arguments. The first is the tag name of the Element, the second is the\nXML::DOM::Element that is being printed. \nThe function should return 0, 1 or 2 to indicate which style should be used to\nprint the empty tag. E.g.\n\n XML::DOM::setTagCompression (\\&my_tag_compression);\n\n sub my_tag_compression\n {\n    my ($tag, $elem) = @_;\n\n    # Print empty br, hr and img tags like this: <br />\n    return 2 if $tag =~ /^(br|hr|img)$/;\n\n    # Print other empty tags like this: <empty></empty>\n    return 1;\n }\n\n=back\n\n=head1 IMPLEMENTATION DETAILS\n\n=over 4\n\n=item * Perl Mappings\n\nThe value undef was used when the DOM Spec said null.\n\nThe DOM Spec says: Applications must encode DOMString using UTF-16 (defined in \nAppendix C.3 of [UNICODE] and Amendment 1 of [ISO-10646]).\nIn this implementation we use plain old Perl strings encoded in UTF-8 instead of\nUTF-16.\n\n=item * Text and CDATASection nodes\n\nThe Expat parser expands EntityReferences and CDataSection sections to \nraw strings and does not indicate where it was found. \nThis implementation does therefore convert both to Text nodes at parse time.\nCDATASection and EntityReference nodes that are added to an existing Document \n(by the user) will be preserved.\n\nAlso, subsequent Text nodes are always merged at parse time. Text nodes that are \nadded later can be merged with the normalize method. Consider using the addText\nmethod when adding Text nodes.\n\n=item * Printing and toString\n\nWhen printing (and converting an XML Document to a string) the strings have to \nencoded differently depending on where they occur. E.g. in a CDATASection all \nsubstrings are allowed except for \"]]>\". In regular text, certain characters are\nnot allowed, e.g. \">\" has to be converted to \"&gt;\". \nThese routines should be verified by someone who knows the details.\n\n=item * Quotes\n\nCertain sections in XML are quoted, like attribute values in an Element.\nXML::Parser strips these quotes and the print methods in this implementation \nalways uses double quotes, so when parsing and printing a document, single quotes\nmay be converted to double quotes. The default value of an attribute definition\n(AttDef) in an AttlistDecl, however, will maintain its quotes.\n\n=item * AttlistDecl\n\nAttribute declarations for a certain Element are always merged into a single\nAttlistDecl object.\n\n=item * Comments\n\nComments in the DOCTYPE section are not kept in the right place. They will become\nchild nodes of the Document.\n\n=item * Hidden Nodes\n\nPrevious versions of XML::DOM would expand parameter entity references\n(like B<%pent;>), so when printing the DTD, it would print the contents\nof the external entity, instead of the parameter entity reference.\nWith this release (1.27), you can prevent this by setting the XML::DOM::Parser\noptions ParseParamEnt => 1 and ExpandParamEnt => 0.\n\nWhen it is parsing the contents of the external entities, it *DOES* still add\nthe nodes to the DocumentType, but it marks these nodes by setting\nthe 'Hidden' property. In addition, it adds an EntityReference node to the\nDocumentType node.\n\nWhen printing the DocumentType node (or when using to_expat() or to_sax()), \nthe 'Hidden' nodes are suppressed, so you will see the parameter entity\nreference instead of the contents of the external entities. See test case\nt/dom_extent.t for an example.\n\nThe reason for adding the 'Hidden' nodes to the DocumentType node, is that\nthe nodes may contain <!ENTITY> definitions that are referenced further\nin the document. (Simply not adding the nodes to the DocumentType could\ncause such entity references to be expanded incorrectly.)\n\nNote that you need XML::Parser 2.27 or higher for this to work correctly.\n\n=back\n\n=head1 SEE ALSO\n\nL<XML::DOM::XPath>\n\nThe Japanese version of this document by Takanori Kawai (Hippo2000)\nat L<http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm>\n\nThe DOM Level 1 specification at L<http://www.w3.org/TR/REC-DOM-Level-1>\n\nThe XML spec (Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>\n\nThe L<XML::Parser> and L<XML::Parser::Expat> manual pages.\n\nL<XML::LibXML> also provides a DOM Parser, and is significantly faster\nthan XML::DOM, and is under active development.  It requires that you \ndownload the Gnome libxml library.\n\nL<XML::GDOME> will provide the DOM Level 2 Core API, and should be\nas fast as XML::LibXML, but more robust, since it uses the memory\nmanagement functions of libgdome.  For more details see\nL<http://tjmather.com/xml-gdome/>\n\n=head1 CAVEATS\n\nThe method getElementsByTagName() does not return a \"live\" NodeList.\nWhether this is an actual caveat is debatable, but a few people on the \nwww-dom mailing list seemed to think so. I haven't decided yet. It's a pain\nto implement, it slows things down and the benefits seem marginal.\nLet me know what you think. \n\n=head1 AUTHOR\n\nEnno Derksen is the original author.\n\nSend patches to T.J. Mather at <F<tjmather@maxmind.com>>.\n\nPaid support is available from directly from the maintainers of this package.\nPlease see L<http://www.maxmind.com/app/opensourceservices> for more details.\n\nThanks to Clark Cooper for his help with the initial version.\n\n=cut\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/Handler/BuildDOM.pm",
    "content": "package XML::Handler::BuildDOM;\nuse strict;\nuse XML::DOM;\n\n#\n# TODO:\n# - add support for parameter entity references\n# - expand API: insert Elements in the tree or stuff into DocType etc.\n\nsub new\n{\n    my ($class, %args) = @_;\n    bless \\%args, $class;\n}\n\n#-------- PerlSAX Handler methods ------------------------------\n\nsub start_document # was Init\n{\n    my $self = shift;\n\n    # Define Document if it's not set & not obtainable from Element or DocType\n    $self->{Document} ||= \n\t(defined $self->{Element} ? $self->{Element}->getOwnerDocument : undef)\n     || (defined $self->{DocType} ? $self->{DocType}->getOwnerDocument : undef)\n     || new XML::DOM::Document();\n\n    $self->{Element} ||= $self->{Document};\n\n    unless (defined $self->{DocType})\n    {\n\t$self->{DocType} = $self->{Document}->getDoctype\n\t    if defined $self->{Document};\n\n\tunless (defined $self->{Doctype})\n\t{\n#?? should be $doc->createDocType for extensibility!\n\t    $self->{DocType} = new XML::DOM::DocumentType ($self->{Document});\n\t    $self->{Document}->setDoctype ($self->{DocType});\n\t}\n    }\n  \n    # Prepare for document prolog\n    $self->{InProlog} = 1;\n\n    # We haven't passed the root element yet\n    $self->{EndDoc} = 0;\n\n    undef $self->{LastText};\n}\n\nsub end_document # was Final\n{\n    my $self = shift;\n    unless ($self->{SawDocType})\n    {\n\tmy $doctype = $self->{Document}->removeDoctype;\n\t$doctype->dispose;\n#?? do we always want to destroy the Doctype?\n    }\n    $self->{Document};\n}\n\nsub characters # was Char\n{\n    my $self = $_[0];\n    my $str = $_[1]->{Data};\n\n    if ($self->{InCDATA} && $self->{KeepCDATA})\n    {\n\tundef $self->{LastText};\n\t# Merge text with previous node if possible\n\t$self->{Element}->addCDATA ($str);\n    }\n    else\n    {\n\t# Merge text with previous node if possible\n\t# Used to be:\t$expat->{DOM_Element}->addText ($str);\n\tif ($self->{LastText})\n\t{\n\t    $self->{LastText}->appendData ($str);\n\t}\n\telse\n\t{\n\t    $self->{LastText} = $self->{Document}->createTextNode ($str);\n\t    $self->{Element}->appendChild ($self->{LastText});\n\t}\n    }\n}\n\nsub start_element # was Start\n{\n    my ($self, $hash) = @_;\n    my $elem = $hash->{Name};\n    my $attr = $hash->{Attributes};\n\n    my $parent = $self->{Element};\n    my $doc = $self->{Document};\n    \n    if ($parent == $doc)\n    {\n\t# End of document prolog, i.e. start of first Element\n\t$self->{InProlog} = 0;\n    }\n    \n    undef $self->{LastText};\n    my $node = $doc->createElement ($elem);\n    $self->{Element} = $node;\n    $parent->appendChild ($node);\n    \n    my $i = 0;\n    my $n = scalar keys %$attr;\n    return unless $n;\n\n    if (exists $hash->{AttributeOrder})\n    {\n\tmy $defaulted = $hash->{Defaulted};\n\tmy @order = @{ $hash->{AttributeOrder} };\n\t\n\t# Specified attributes\n\tfor (my $i = 0; $i < $defaulted; $i++)\n\t{\n\t    my $a = $order[$i];\n\t    my $att = $doc->createAttribute ($a, $attr->{$a}, 1);\n\t    $node->setAttributeNode ($att);\n\t}\n\n\t# Defaulted attributes\n\tfor (my $i = $defaulted; $i < @order; $i++)\n\t{\n\t    my $a = $order[$i];\n\t    my $att = $doc->createAttribute ($elem, $attr->{$a}, 0);\n\t    $node->setAttributeNode ($att);\n\t}\n    }\n    else\n    {\n\t# We're assuming that all attributes were specified (1)\n\tfor my $a (keys %$attr)\n\t{\n\t    my $att = $doc->createAttribute ($a, $attr->{$a}, 1);\n\t    $node->setAttributeNode ($att);\n\t}\n    }\n}\n\nsub end_element\n{\n    my $self = shift;\n    $self->{Element} = $self->{Element}->getParentNode;\n    undef $self->{LastText};\n\n    # Check for end of root element\n    $self->{EndDoc} = 1 if ($self->{Element} == $self->{Document});\n}\n\nsub entity_reference # was Default\n{\n    my $self = $_[0];\n    my $name = $_[1]->{Name};\n    \n    $self->{Element}->appendChild (\n\t\t\t    $self->{Document}->createEntityReference ($name));\n    undef $self->{LastText};\n}\n\nsub start_cdata\n{\n    my $self = shift;\n    $self->{InCDATA} = 1;\n}\n\nsub end_cdata\n{\n    my $self = shift;\n    $self->{InCDATA} = 0;\n}\n\nsub comment\n{\n    my $self = $_[0];\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    undef $self->{LastText};\n    my $comment = $self->{Document}->createComment ($_[1]->{Data});\n    $self->{Element}->appendChild ($comment);\n}\n\nsub doctype_decl\n{\n    my ($self, $hash) = @_;\n\n    $self->{DocType}->setParams ($hash->{Name}, $hash->{SystemId}, \n\t\t\t\t $hash->{PublicId}, $hash->{Internal});\n    $self->{SawDocType} = 1;\n}\n\nsub attlist_decl\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    $self->{DocType}->addAttDef ($hash->{ElementName},\n\t\t\t\t $hash->{AttributeName},\n\t\t\t\t $hash->{Type},\n\t\t\t\t $hash->{Default},\n\t\t\t\t $hash->{Fixed});\n}\n\nsub xml_decl\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    undef $self->{LastText};\n    $self->{Document}->setXMLDecl (new XML::DOM::XMLDecl ($self->{Document}, \n\t\t\t\t\t\t\t  $hash->{Version},\n\t\t\t\t\t\t\t  $hash->{Encoding},\n\t\t\t\t\t\t\t  $hash->{Standalone}));\n}\n\nsub entity_decl\n{\n    my ($self, $hash) = @_;\n    \n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    # Parameter Entities names are passed starting with '%'\n    my $parameter = 0;\n\n#?? parameter entities currently not supported by PerlSAX!\n\n    undef $self->{LastText};\n    $self->{DocType}->addEntity ($parameter, $hash->{Name}, $hash->{Value}, \n\t\t\t\t $hash->{SystemId}, $hash->{PublicId}, \n\t\t\t\t $hash->{Notation});\n}\n\n# Unparsed is called when it encounters e.g:\n#\n#   <!ENTITY logo SYSTEM \"http://server/logo.gif\" NDATA gif>\n#\nsub unparsed_decl\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    # same as regular ENTITY, as far as DOM is concerned\n    $self->entity_decl ($hash);\n}\n\nsub element_decl\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    undef $self->{LastText};\n    $self->{DocType}->addElementDecl ($hash->{Name}, $hash->{Model});\n}\n\nsub notation_decl\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    undef $self->{LastText};\n    $self->{DocType}->addNotation ($hash->{Name}, $hash->{Base}, \n\t\t\t\t   $hash->{SystemId}, $hash->{PublicId});\n}\n\nsub processing_instruction\n{\n    my ($self, $hash) = @_;\n\n    local $XML::DOM::IgnoreReadOnly = 1;\n\n    undef $self->{LastText};\n    $self->{Element}->appendChild (new XML::DOM::ProcessingInstruction \n\t\t\t    ($self->{Document}, $hash->{Target}, $hash->{Data}));\n}\n\nreturn 1;\n\n__END__\n\n=head1 NAME\n\nXML::Handler::BuildDOM - PerlSAX handler that creates XML::DOM document structures\n\n=head1 SYNOPSIS\n\n use XML::Handler::BuildDOM;\n use XML::Parser::PerlSAX;\n\n my $handler = new XML::Handler::BuildDOM (KeepCDATA => 1);\n my $parser = new XML::Parser::PerlSAX (Handler => $handler);\n\n my $doc = $parser->parsefile (\"file.xml\");\n\n=head1 DESCRIPTION\n\nXML::Handler::BuildDOM creates L<XML::DOM> document structures \n(i.e. L<XML::DOM::Document>) from PerlSAX events.\n\nThis class used to be called L<XML::PerlSAX::DOM> prior to libxml-enno 1.0.1.\n\n=head2 CONSTRUCTOR OPTIONS\n\nThe XML::Handler::BuildDOM constructor supports the following options:\n\n=over 4\n\n=item * KeepCDATA => 1 \n\nIf set to 0 (default), CDATASections will be converted to regular text.\n\n=item * Document => $doc\n\nIf undefined, start_document will extract it from Element or DocType (if set),\notherwise it will create a new XML::DOM::Document.\n\n=item * Element => $elem\n\nIf undefined, it is set to Document. This will be the insertion point (or parent)\nfor the nodes defined by the following callbacks.\n\n=item * DocType => $doctype\n\nIf undefined, start_document will extract it from Document (if possible).\nOtherwise it adds a new XML::DOM::DocumentType to the Document.\n\n=back\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/XML/RegExp.pm",
    "content": "package XML::RegExp;\n\nuse vars qw( $BaseChar $Ideographic $Letter $Digit $Extender \n\t     $CombiningChar $NameChar \n\t     $EntityRef $CharRef $Reference\n\t     $Name $NmToken $AttValue\n\t     $NCNameChar $NCName $Prefix $LocalPart $QName \n\t     $VERSION );\n\n$VERSION = '0.04';\n\n$BaseChar = '(?:[a-zA-Z]|\\xC3[\\x80-\\x96\\x98-\\xB6\\xB8-\\xBF]|\\xC4[\\x80-\\xB1\\xB4-\\xBE]|\\xC5[\\x81-\\x88\\x8A-\\xBE]|\\xC6[\\x80-\\xBF]|\\xC7[\\x80-\\x83\\x8D-\\xB0\\xB4\\xB5\\xBA-\\xBF]|\\xC8[\\x80-\\x97]|\\xC9[\\x90-\\xBF]|\\xCA[\\x80-\\xA8\\xBB-\\xBF]|\\xCB[\\x80\\x81]|\\xCE[\\x86\\x88-\\x8A\\x8C\\x8E-\\xA1\\xA3-\\xBF]|\\xCF[\\x80-\\x8E\\x90-\\x96\\x9A\\x9C\\x9E\\xA0\\xA2-\\xB3]|\\xD0[\\x81-\\x8C\\x8E-\\xBF]|\\xD1[\\x80-\\x8F\\x91-\\x9C\\x9E-\\xBF]|\\xD2[\\x80\\x81\\x90-\\xBF]|\\xD3[\\x80-\\x84\\x87\\x88\\x8B\\x8C\\x90-\\xAB\\xAE-\\xB5\\xB8\\xB9]|\\xD4[\\xB1-\\xBF]|\\xD5[\\x80-\\x96\\x99\\xA1-\\xBF]|\\xD6[\\x80-\\x86]|\\xD7[\\x90-\\xAA\\xB0-\\xB2]|\\xD8[\\xA1-\\xBA]|\\xD9[\\x81-\\x8A\\xB1-\\xBF]|\\xDA[\\x80-\\xB7\\xBA-\\xBE]|\\xDB[\\x80-\\x8E\\x90-\\x93\\x95\\xA5\\xA6]|\\xE0(?:\\xA4[\\x85-\\xB9\\xBD]|\\xA5[\\x98-\\xA1]|\\xA6[\\x85-\\x8C\\x8F\\x90\\x93-\\xA8\\xAA-\\xB0\\xB2\\xB6-\\xB9]|\\xA7[\\x9C\\x9D\\x9F-\\xA1\\xB0\\xB1]|\\xA8[\\x85-\\x8A\\x8F\\x90\\x93-\\xA8\\xAA-\\xB0\\xB2\\xB3\\xB5\\xB6\\xB8\\xB9]|\\xA9[\\x99-\\x9C\\x9E\\xB2-\\xB4]|\\xAA[\\x85-\\x8B\\x8D\\x8F-\\x91\\x93-\\xA8\\xAA-\\xB0\\xB2\\xB3\\xB5-\\xB9\\xBD]|\\xAB\\xA0|\\xAC[\\x85-\\x8C\\x8F\\x90\\x93-\\xA8\\xAA-\\xB0\\xB2\\xB3\\xB6-\\xB9\\xBD]|\\xAD[\\x9C\\x9D\\x9F-\\xA1]|\\xAE[\\x85-\\x8A\\x8E-\\x90\\x92-\\x95\\x99\\x9A\\x9C\\x9E\\x9F\\xA3\\xA4\\xA8-\\xAA\\xAE-\\xB5\\xB7-\\xB9]|\\xB0[\\x85-\\x8C\\x8E-\\x90\\x92-\\xA8\\xAA-\\xB3\\xB5-\\xB9]|\\xB1[\\xA0\\xA1]|\\xB2[\\x85-\\x8C\\x8E-\\x90\\x92-\\xA8\\xAA-\\xB3\\xB5-\\xB9]|\\xB3[\\x9E\\xA0\\xA1]|\\xB4[\\x85-\\x8C\\x8E-\\x90\\x92-\\xA8\\xAA-\\xB9]|\\xB5[\\xA0\\xA1]|\\xB8[\\x81-\\xAE\\xB0\\xB2\\xB3]|\\xB9[\\x80-\\x85]|\\xBA[\\x81\\x82\\x84\\x87\\x88\\x8A\\x8D\\x94-\\x97\\x99-\\x9F\\xA1-\\xA3\\xA5\\xA7\\xAA\\xAB\\xAD\\xAE\\xB0\\xB2\\xB3\\xBD]|\\xBB[\\x80-\\x84]|\\xBD[\\x80-\\x87\\x89-\\xA9])|\\xE1(?:\\x82[\\xA0-\\xBF]|\\x83[\\x80-\\x85\\x90-\\xB6]|\\x84[\\x80\\x82\\x83\\x85-\\x87\\x89\\x8B\\x8C\\x8E-\\x92\\xBC\\xBE]|\\x85[\\x80\\x8C\\x8E\\x90\\x94\\x95\\x99\\x9F-\\xA1\\xA3\\xA5\\xA7\\xA9\\xAD\\xAE\\xB2\\xB3\\xB5]|\\x86[\\x9E\\xA8\\xAB\\xAE\\xAF\\xB7\\xB8\\xBA\\xBC-\\xBF]|\\x87[\\x80-\\x82\\xAB\\xB0\\xB9]|[\\xB8\\xB9][\\x80-\\xBF]|\\xBA[\\x80-\\x9B\\xA0-\\xBF]|\\xBB[\\x80-\\xB9]|\\xBC[\\x80-\\x95\\x98-\\x9D\\xA0-\\xBF]|\\xBD[\\x80-\\x85\\x88-\\x8D\\x90-\\x97\\x99\\x9B\\x9D\\x9F-\\xBD]|\\xBE[\\x80-\\xB4\\xB6-\\xBC\\xBE]|\\xBF[\\x82-\\x84\\x86-\\x8C\\x90-\\x93\\x96-\\x9B\\xA0-\\xAC\\xB2-\\xB4\\xB6-\\xBC])|\\xE2(?:\\x84[\\xA6\\xAA\\xAB\\xAE]|\\x86[\\x80-\\x82])|\\xE3(?:\\x81[\\x81-\\xBF]|\\x82[\\x80-\\x94\\xA1-\\xBF]|\\x83[\\x80-\\xBA]|\\x84[\\x85-\\xAC])|\\xEA(?:[\\xB0-\\xBF][\\x80-\\xBF])|\\xEB(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xEC(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xED(?:[\\x80-\\x9D][\\x80-\\xBF]|\\x9E[\\x80-\\xA3]))';\n\n$Ideographic = '(?:\\xE3\\x80[\\x87\\xA1-\\xA9]|\\xE4(?:[\\xB8-\\xBF][\\x80-\\xBF])|\\xE5(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xE6(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xE7(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xE8(?:[\\x80-\\xBF][\\x80-\\xBF])|\\xE9(?:[\\x80-\\xBD][\\x80-\\xBF]|\\xBE[\\x80-\\xA5]))';\n\n$Digit = '(?:[0-9]|\\xD9[\\xA0-\\xA9]|\\xDB[\\xB0-\\xB9]|\\xE0(?:\\xA5[\\xA6-\\xAF]|\\xA7[\\xA6-\\xAF]|\\xA9[\\xA6-\\xAF]|\\xAB[\\xA6-\\xAF]|\\xAD[\\xA6-\\xAF]|\\xAF[\\xA7-\\xAF]|\\xB1[\\xA6-\\xAF]|\\xB3[\\xA6-\\xAF]|\\xB5[\\xA6-\\xAF]|\\xB9[\\x90-\\x99]|\\xBB[\\x90-\\x99]|\\xBC[\\xA0-\\xA9]))';\n\n$Extender = '(?:\\xC2\\xB7|\\xCB[\\x90\\x91]|\\xCE\\x87|\\xD9\\x80|\\xE0(?:\\xB9\\x86|\\xBB\\x86)|\\xE3(?:\\x80[\\x85\\xB1-\\xB5]|\\x82[\\x9D\\x9E]|\\x83[\\xBC-\\xBE]))';\n\n$CombiningChar = '(?:\\xCC[\\x80-\\xBF]|\\xCD[\\x80-\\x85\\xA0\\xA1]|\\xD2[\\x83-\\x86]|\\xD6[\\x91-\\xA1\\xA3-\\xB9\\xBB-\\xBD\\xBF]|\\xD7[\\x81\\x82\\x84]|\\xD9[\\x8B-\\x92\\xB0]|\\xDB[\\x96-\\xA4\\xA7\\xA8\\xAA-\\xAD]|\\xE0(?:\\xA4[\\x81-\\x83\\xBC\\xBE\\xBF]|\\xA5[\\x80-\\x8D\\x91-\\x94\\xA2\\xA3]|\\xA6[\\x81-\\x83\\xBC\\xBE\\xBF]|\\xA7[\\x80-\\x84\\x87\\x88\\x8B-\\x8D\\x97\\xA2\\xA3]|\\xA8[\\x82\\xBC\\xBE\\xBF]|\\xA9[\\x80-\\x82\\x87\\x88\\x8B-\\x8D\\xB0\\xB1]|\\xAA[\\x81-\\x83\\xBC\\xBE\\xBF]|\\xAB[\\x80-\\x85\\x87-\\x89\\x8B-\\x8D]|\\xAC[\\x81-\\x83\\xBC\\xBE\\xBF]|\\xAD[\\x80-\\x83\\x87\\x88\\x8B-\\x8D\\x96\\x97]|\\xAE[\\x82\\x83\\xBE\\xBF]|\\xAF[\\x80-\\x82\\x86-\\x88\\x8A-\\x8D\\x97]|\\xB0[\\x81-\\x83\\xBE\\xBF]|\\xB1[\\x80-\\x84\\x86-\\x88\\x8A-\\x8D\\x95\\x96]|\\xB2[\\x82\\x83\\xBE\\xBF]|\\xB3[\\x80-\\x84\\x86-\\x88\\x8A-\\x8D\\x95\\x96]|\\xB4[\\x82\\x83\\xBE\\xBF]|\\xB5[\\x80-\\x83\\x86-\\x88\\x8A-\\x8D\\x97]|\\xB8[\\xB1\\xB4-\\xBA]|\\xB9[\\x87-\\x8E]|\\xBA[\\xB1\\xB4-\\xB9\\xBB\\xBC]|\\xBB[\\x88-\\x8D]|\\xBC[\\x98\\x99\\xB5\\xB7\\xB9\\xBE\\xBF]|\\xBD[\\xB1-\\xBF]|\\xBE[\\x80-\\x84\\x86-\\x8B\\x90-\\x95\\x97\\x99-\\xAD\\xB1-\\xB7\\xB9])|\\xE2\\x83[\\x90-\\x9C\\xA1]|\\xE3(?:\\x80[\\xAA-\\xAF]|\\x82[\\x99\\x9A]))';\n\n$Letter\t=\t \"(?:$BaseChar|$Ideographic)\";\n$NameChar\t= \"(?:[-._:]|$Letter|$Digit|$CombiningChar|$Extender)\";\n\n$Name\t\t= \"(?:(?:[:_]|$Letter)$NameChar*)\";\n$NmToken\t= \"(?:$NameChar+)\";\n$EntityRef\t= \"(?:\\&$Name;)\";\n$CharRef\t= \"(?:\\&#(?:[0-9]+|x[0-9a-fA-F]+);)\";\n$Reference\t= \"(?:$EntityRef|$CharRef)\";\n\n#?? what if it contains entity references?\n$AttValue     = \"(?:\\\"(?:[^\\\"&<]*|$Reference)\\\"|'(?:[^\\'&<]|$Reference)*')\";\n\n#########################################################################\n# The following definitions came from the XML Namespaces spec:\n#########################################################################\n\n# Same as $NameChar without the \":\"\n$NCNameChar\t= \"(?:[-._]|$Letter|$Digit|$CombiningChar|$Extender)\";\n\n# Same as $Name without the colons\n$NCName\t\t= \"(?:(?:_|$Letter)$NCNameChar*)\";\n\n$Prefix\t\t= $NCName;\n$LocalPart\t= $NCName;\n$QName\t\t= \"(?:(?:$Prefix:)?$LocalPart)\";\n\nreturn 1;\n\n__END__\n\n=head1 NAME\n\nXML::RegExp - Regular expressions for XML tokens\n\n=head1 SYNOPSIS\n\n use XML::RegExp;\n\n if ($my_name =~ /^$XML::RegExp::Name$/)\n {\n   # $my_name is a valid XML 'Name'\n }\n\n=head1 DESCRIPTION\n\nThis package contains regular expressions for the following XML tokens:\nBaseChar, Ideographic, Letter, Digit, Extender, CombiningChar, NameChar, \nEntityRef, CharRef, Reference, Name, NmToken, and AttValue.\n\nThe definitions of these tokens were taken from the XML spec \n(Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>.\n\nAlso contains the regular expressions for the following tokens from the\nXML Namespaces spec at L<http://www.w3.org/TR/REC-xml-names>:\nNCNameChar, NCName, QName, Prefix and LocalPart.\n\n=head1 AUTHOR\n\nOriginal Author is Enno Derksen <F<enno@att.com>>\n\nPlease send bugs, comments and suggestions to T.J. Mather <F<tjmather@tjmather.com>>\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-1.6-Exceptions/adj.exc",
    "content": "after after\nairier airy\nairiest airy\nangrier angry\nangriest angry\nartier arty\nartiest arty\nashier ashy\nashiest ashy\nbaggier baggy\nbaggiest baggy\nbalkier balky\nbalkiest balky\nbalmier balmy\nbalmiest balmy\nbandier bandy\nbandiest bandy\nbarmier barmy\nbarmiest barmy\nbattier batty\nbattiest batty\nbaulkier baulky\nbaulkiest baulky\nbawdier bawdy\nbawdiest bawdy\nbeadier beady\nbeadiest beady\nbeastlier beastly\nbeastliest beastly\nbeefier beefy\nbeefiest beefy\nbeerier beery\nbeeriest beery\nbendier bendy\nbendiest bendy\nbigger big\nbiggest big\nbitchier bitchy\nbitchiest bitchy\nbittier bitty\nbittiest bitty\nblearier bleary\nbleariest bleary\nbloodier bloody\nbloodiest bloody\nbloodthirstier bloodthirsty\nbloodthirstiest bloodthirsty\nblowier blowy\nblowiest blowy\nblowsier blowsy\nblowsiest blowsy\nblowzier blowzy\nblowziest blowzy\nbluer blue\nbluest blue\nbonier bony\nboniest bony\nbonnier bonny\nbonniest bonny\nboozier boozy\nbooziest boozy\nboskier bosky\nboskiest bosky\nbossier bossy\nbossiest bossy\nbotchier botchy\nbotchiest botchy\nbother bother\nbouncier bouncy\nbounciest bouncy\nbrainier brainy\nbrainiest brainy\nbrashier brashy\nbrashiest brashy\nbrassier brassy\nbrassiest brassy\nbrawnier brawny\nbrawniest brawny\nbreathier breathy\nbreathiest breathy\nbreezier breezy\nbreeziest breezy\nbrinier briny\nbriniest briny\nbroodier broody\nbroodiest broody\nbubblier bubbly\nbubbliest bubbly\nbuggier buggy\nbuggiest buggy\nbulkier bulky\nbulkiest bulky\nbumpier bumpy\nbumpiest bumpy\nbunchier bunchy\nbunchiest bunchy\nburlier burly\nburliest burly\nburrier burry\nburriest burry\nbushier bushy\nbushiest bushy\nbusier busy\nbusiest busy\nbustier busty\nbustiest busty\ncagier cagey\ncagiest cagey\ncannier canny\ncanniest canny\ncantier canty\ncantiest canty\ncatchier catchy\ncatchiest catchy\ncattier catty\ncattiest catty\nchancier chancy\nchanciest chancy\ncharier chary\nchariest chary\nchattier chatty\nchattiest chatty\ncheekier cheeky\ncheekiest cheeky\ncheerier cheery\ncheeriest cheery\ncheesier cheesy\ncheesiest cheesy\nchestier chesty\nchestiest chesty\nchewier chewy\nchewiest chewy\nchillier chilly\nchilliest chilly\nchintzier chintzy\nchintziest chintzy\nchippier chippy\nchippiest chippy\nchoosier choosy\nchoosiest choosy\nchoppier choppy\nchoppiest choppy\nchubbier chubby\nchubbiest chubby\nchuffier chuffy\nchuffiest chuffy\nchummier chummy\nchummiest chummy\nchunkier chunky\nchunkiest chunky\nchurchier churchy\nchurchiest churchy\nclammier clammy\nclammiest clammy\nclassier classy\nclassiest classy\ncleanlier cleanly\ncleanliest cleanly\nclerklier clerkly\nclerkliest clerkly\ncloudier cloudy\ncloudiest cloudy\nclubbier clubby\nclubbiest clubby\nclumsier clumsy\nclumsiest clumsy\ncockier cocky\ncockiest cocky\ncollier colly\ncolliest colly\ncomelier comely\ncomeliest comely\ncomfier comfy\ncomfiest comfy\ncornier corny\ncorniest corny\ncosier cosy\ncosiest cosy\ncostlier costly\ncostliest costly\ncourtlier courtly\ncourtliest courtly\ncozier cozy\ncoziest cozy\ncrabbier crabby\ncrabbiest crabby\ncraftier crafty\ncraftiest crafty\ncraggier craggy\ncraggiest craggy\ncrankier cranky\ncrankiest cranky\ncrawlier crawly\ncrawliest crawly\ncrazier crazy\ncraziest crazy\ncreamier creamy\ncreamiest creamy\ncreepier creepy\ncreepiest creepy\ncrispier crispy\ncrispiest crispy\ncrumbier crumby\ncrumbiest crumby\ncrumblier crumbly\ncrumbliest crumbly\ncrummier crummy\ncrummiest crummy\ncrustier crusty\ncrustiest crusty\ncurlier curly\ncurliest curly\ndaffier daffy\ndaffiest daffy\ndaintier dainty\ndaintiest dainty\ndandier dandy\ndandiest dandy\ndeadlier deadly\ndeadliest deadly\ndewier dewy\ndewiest dewy\ndicier dicey\ndiciest dicey\ndimmer dim\ndimmest dim\ndingier dingy\ndingiest dingy\ndinkier dinky\ndinkiest dinky\ndippier dippy\ndippiest dippy\ndirtier dirty\ndirtiest dirty\ndishier dishy\ndishiest dishy\ndizzier dizzy\ndizziest dizzy\ndodgier dodgy\ndodgiest dodgy\ndopier dopey\ndopiest dopey\ndottier dotty\ndottiest dotty\ndoughier doughy\ndoughiest doughy\ndoughtier doughty\ndoughtiest doughty\ndowdier dowdy\ndowdiest dowdy\ndowier dowie dowy\ndowiest dowie dowy\ndownier downy\ndowniest downy\ndozier dozy\ndoziest dozy\ndrabber drab\ndrabbest drab\ndraftier drafty\ndraftiest drafty\ndraggier draggy\ndraggiest draggy\ndraughtier draughty\ndraughtiest draughty\ndreamier dreamy\ndreamiest dreamy\ndrearier dreary\ndreariest dreary\ndreggier dreggy\ndreggiest dreggy\ndressier dressy\ndressiest dressy\ndrier dry\ndriest dry\ndrippier drippy\ndrippiest drippy\ndrowsier drowsy\ndrowsiest drowsy\ndryer dry\ndryest dry\ndumpier dumpy\ndumpiest dumpy\ndunner dun\ndunnest dun\nduskier dusky\nduskiest dusky\ndustier dusty\ndustiest dusty\nearlier early\nearliest early\nearthier earthy\nearthiest earthy\nearthlier earthly\nearthliest earthly\neasier easy\neasiest easy\nedgier edgy\nedgiest edgy\neerier eerie\neeriest eerie\nemptier empty\nemptiest empty\nfancier fancy\nfanciest fancy\nfatter fat\nfattest fat\nfattier fatty\nfattiest fatty\nfaultier faulty\nfaultiest faulty\nfeistier feisty\nfeistiest feisty\nfiddlier fiddly\nfiddliest fiddly\nfilmier filmy\nfilmiest filmy\nfilthier filthy\nfilthiest filthy\nfinnier finny\nfinniest finny\nfishier fishy\nfishiest fishy\nfitter fit\nfittest fit\nflabbier flabby\nflabbiest flabby\nflaggier flaggy\nflaggiest flaggy\nflakier flaky\nflakiest flaky\nflashier flashy\nflashiest flashy\nflatter flat\nflattest flat\nflauntier flaunty\nflauntiest flaunty\nfledgier fledgy\nfledgiest fledgy\nfleecier fleecy\nfleeciest fleecy\nfleshier fleshy\nfleshiest fleshy\nfleshlier fleshly\nfleshliest fleshly\nflightier flighty\nflightiest flighty\nflimsier flimsy\nflimsiest flimsy\nflintier flinty\nflintiest flinty\nfloatier floaty\nfloatiest floaty\nfloppier floppy\nfloppiest floppy\nflossier flossy\nflossiest flossy\nfluffier fluffy\nfluffiest fluffy\nflukier fluky\nflukiest fluky\nfoamier foamy\nfoamiest foamy\nfoggier foggy\nfoggiest foggy\nfolksier folksy\nfolksiest folksy\nfoolhardier foolhardy\nfoolhardiest foolhardy\nforest forest\nfoxier foxy\nfoxiest foxy\nfratchier fratchy\nfratchiest fratchy\nfreakier freaky\nfreakiest freaky\nfreer free\nfreest free\nfrenchier frenchy\nfrenchiest frenchy\nfriendlier friendly\nfriendliest friendly\nfriskier frisky\nfriskiest frisky\nfrizzier frizzy\nfrizziest frizzy\nfrizzlier frizzly\nfrizzliest frizzly\nfrostier frosty\nfrostiest frosty\nfrouzier frouzy\nfrouziest frouzy\nfrowsier frowsy\nfrowsiest frowsy\nfrowzier frowzy\nfrowziest frowzy\nfruitier fruity\nfruitiest fruity\nfunkier funky\nfunkiest funky\nfunnier funny\nfunniest funny\nfurrier furry\nfurriest furry\nfussier fussy\nfussiest fussy\nfustier fusty\nfustiest fusty\nfuzzier fuzzy\nfuzziest fuzzy\ngabbier gabby\ngabbiest gabby\ngamier gamy\ngamiest gamy\ngammier gammy\ngammiest gammy\ngassier gassy\ngassiest gassy\ngaudier gaudy\ngaudiest gaudy\ngauzier gauzy\ngauziest gauzy\ngawkier gawky\ngawkiest gawky\nghastlier ghastly\nghastliest ghastly\nghostlier ghostly\nghostliest ghostly\ngiddier giddy\ngiddiest giddy\ngladder glad\ngladdest glad\nglassier glassy\nglassiest glassy\nglibber glib\nglibbest glib\ngloomier gloomy\ngloomiest gloomy\nglossier glossy\nglossiest glossy\nglummer glum\nglummest glum\ngodlier godly\ngodliest godly\ngoodlier goodly\ngoodliest goodly\ngoofier goofy\ngoofiest goofy\ngooier gooey\ngooiest gooey\ngoosier goosy\ngoosiest goosy\ngorier gory\ngoriest gory\ngradelier gradely\ngradeliest gradely\ngrainier grainy\ngrainiest grainy\ngrassier grassy\ngrassiest grassy\ngreasier greasy\ngreasiest greasy\ngreedier greedy\ngreediest greedy\ngrimmer grim\ngrimmest grim\ngrislier grisly\ngrisliest grisly\ngrittier gritty\ngrittiest gritty\ngrizzlier grizzly\ngrizzliest grizzly\ngroggier groggy\ngroggiest groggy\ngroovier groovy\ngrooviest groovy\ngrottier grotty\ngrottiest grotty\ngroutier grouty\ngroutiest grouty\ngrubbier grubby\ngrubbiest grubby\ngrumpier grumpy\ngrumpiest grumpy\nguiltier guilty\nguiltiest guilty\ngummier gummy\ngummiest gummy\ngushier gushy\ngushiest gushy\ngustier gusty\ngustiest gusty\ngutsier gutsy\ngutsiest gutsy\nhairier hairy\nhairiest hairy\nhalfways halfway\nhammier hammy\nhammiest hammy\nhandier handy\nhandiest handy\nhappier happy\nhappiest happy\nhardier hardy\nhardiest hardy\nhastier hasty\nhastiest hasty\nhaughtier haughty\nhaughtiest haughty\nhazier hazy\nhaziest hazy\nheadier heady\nheadiest heady\nhealthier healthy\nhealthiest healthy\nheartier hearty\nheartiest hearty\nheavier heavy\nheaviest heavy\nheftier hefty\nheftiest hefty\nhepper hep\nheppest hep\nherbier herby\nherbiest herby\nhinder hind\nhipper hip\nhippest hip\nhippier hippy\nhippiest hippy\nhoarier hoary\nhoariest hoary\nholier holy\nholiest holy\nhomelier homely\nhomeliest homely\nhomier homey\nhomiest homey\nhornier horny\nhorniest horny\nhorsier horsy\nhorsiest horsy\nhotter hot\nhottest hot\nhumpier humpy\nhumpiest humpy\nhungrier hungry\nhungriest hungry\nhuskier husky\nhuskiest husky\nicier icy\niciest icy\ninkier inky\ninkiest inky\njaggier jaggy\njaggiest jaggy\njammier jammy\njammiest jammy\njauntier jaunty\njauntiest jaunty\njazzier jazzy\njazziest jazzy\njerkier jerky\njerkiest jerky\njollier jolly\njolliest jolly\njuicier juicy\njuiciest juicy\njumpier jumpy\njumpiest jumpy\nkindlier kindly\nkindliest kindly\nkinkier kinky\nkinkiest kinky\nknottier knotty\nknottiest knotty\nknurlier knurly\nknurliest knurly\nkookier kooky\nkookiest kooky\nlacier lacy\nlaciest lacy\nlairier lairy\nlairiest lairy\nlakier laky\nlakiest laky\nlankier lanky\nlankiest lanky\nlathier lathy\nlathiest lathy\nlayer layer\nlazier lazy\nlaziest lazy\nleafier leafy\nleafiest leafy\nleakier leaky\nleakiest leaky\nlearier leary\nleariest leary\nleerier leery\nleeriest leery\nleggier leggy\nleggiest leggy\nlengthier lengthy\nlengthiest lengthy\nlimier limy\nlimiest limy\nlippier lippy\nlippiest lippy\nlivelier lively\nliveliest lively\nloftier lofty\nloftiest lofty\nlogier logy\nlogiest logy\nlonelier lonely\nloneliest lonely\nloonier loony\nlooniest loony\nloopier loopy\nloopiest loopy\nlordlier lordly\nlordliest lordly\nlousier lousy\nlousiest lousy\nlovelier lovely\nloveliest lovely\nlowlier lowly\nlowliest lowly\nluckier lucky\nluckiest lucky\nlumpier lumpy\nlumpiest lumpy\nlunier luny\nluniest luny\nlustier lusty\nlustiest lusty\nmadder mad\nmaddest mad\nmaltier malty\nmaltiest malty\nmangier mangy\nmangiest mangy\nmankier manky\nmankiest manky\nmanlier manly\nmanliest manly\nmarshier marshy\nmarshiest marshy\nmassier massy\nmassiest massy\nmatter matter\nmaungier maungy\nmaungiest maungy\nmazier mazy\nmaziest mazy\nmealier mealy\nmealiest mealy\nmeaslier measly\nmeasliest measly\nmeatier meaty\nmeatiest meaty\nmerrier merry\nmerriest merry\nmessier messy\nmessiest messy\nmiffier miffy\nmiffiest miffy\nmightier mighty\nmightiest mighty\nmilkier milky\nmilkiest milky\nmingier mingy\nmingiest mingy\nmirkier mirky\nmirkiest mirky\nmistier misty\nmistiest misty\nmodest modest\nmoldier moldy\nmoldiest moldy\nmoodier moody\nmoodiest moody\nmoonier moony\nmooniest moony\nmothier mothy\nmothiest mothy\nmouldier mouldy\nmouldiest mouldy\nmousier mousy\nmousiest mousy\nmouthier mouthy\nmouthiest mouthy\nmuckier mucky\nmuckiest mucky\nmuddier muddy\nmuddiest muddy\nmuggier muggy\nmuggiest muggy\nmurkier murky\nmurkiest murky\nmushier mushy\nmushiest mushy\nmuskier musky\nmuskiest musky\nmustier musty\nmustiest musty\nmuzzier muzzy\nmuzziest muzzy\nnappier nappy\nnappiest nappy\nnastier nasty\nnastiest nasty\nnattier natty\nnattiest natty\nnaughtier naughty\nnaughtiest naughty\nneedier needy\nneediest needy\nnervier nervy\nnerviest nervy\nnewsier newsy\nnewsiest newsy\nniftier nifty\nniftiest nifty\nnippier nippy\nnippiest nippy\nnittier nitty\nnittiest nitty\nnoisier noisy\nnoisiest noisy\nnosier nosy\nnosiest nosy\nnuttier nutty\nnuttiest nutty\noilier oily\noiliest oily\noozier oozy\nooziest oozy\npallier pally\npalliest pally\npalmier palmy\npalmiest palmy\npaltrier paltry\npaltriest paltry\npappier pappy\npappiest pappy\nparkier parky\nparkiest parky\npastier pasty\npastiest pasty\npatchier patchy\npatchiest patchy\npawkier pawky\npawkiest pawky\npeachier peachy\npeachiest peachy\npearlier pearly\npearliest pearly\npeppier peppy\npeppiest peppy\nperkier perky\nperkiest perky\npeskier pesky\npeskiest pesky\npettier petty\npettiest petty\nphonier phony\nphoniest phony\npickier picky\npickiest picky\npiggier piggy\npiggiest piggy\npinier piny\npiniest piny\npitchier pitchy\npitchiest pitchy\npithier pithy\npithiest pithy\nplashier plashy\nplashiest plashy\nplatier platy\nplatiest platy\npluckier plucky\npluckiest plucky\nplumier plumy\nplumiest plumy\nplummier plummy\nplummiest plummy\npodgier podgy\npodgiest podgy\npokier poky\npokiest poky\nporkier porky\nporkiest porky\nportlier portly\nportliest portly\npottier potty\npottiest potty\npreachier preachy\npreachiest preachy\nprettier pretty\nprettiest pretty\npricier pricy\npriciest pricy\npricklier prickly\nprickliest prickly\npriestlier priestly\npriestliest priestly\nprimmer prim\nprimmest prim\nprincelier princely\nprinceliest princely\nprissier prissy\nprissiest prissy\nprivier privy\npriviest privy\nprosier prosy\nprosiest prosy\npudgier pudgy\npudgiest pudgy\npuffier puffy\npuffiest puffy\npulpier pulpy\npulpiest pulpy\npunchier punchy\npunchiest punchy\npunier puny\npuniest puny\npushier pushy\npushiest pushy\npussier pussy\npussiest pussy\nquaggier quaggy\nquaggiest quaggy\nquakier quaky\nquakiest quaky\nqueasier queasy\nqueasiest queasy\nqueenlier queenly\nqueenliest queenly\nracier racy\nraciest racy\nrainier rainy\nrainiest rainy\nrandier randy\nrandiest randy\nrangier rangy\nrangiest rangy\nrattier ratty\nrattiest ratty\nrattlier rattly\nrattliest rattly\nraunchier raunchy\nraunchiest raunchy\nreadier ready\nreadiest ready\nredder red\nreddest red\nreedier reedy\nreediest reedy\nrimier rimy\nrimiest rimy\nriskier risky\nriskiest risky\nritzier ritzy\nritziest ritzy\nrockier rocky\nrockiest rocky\nroilier roily\nroiliest roily\nrookier rooky\nrookiest rooky\nroomier roomy\nroomiest roomy\nropier ropy\nropiest ropy\nrosier rosy\nrosiest rosy\nrowdier rowdy\nrowdiest rowdy\nruddier ruddy\nruddiest ruddy\nrunnier runny\nrunniest runny\nrushier rushy\nrushiest rushy\nrustier rusty\nrustiest rusty\nruttier rutty\nruttiest rutty\nsadder sad\nsaddest sad\nsaltier salty\nsaltiest salty\nsandier sandy\nsandiest sandy\nsappier sappy\nsappiest sappy\nsassier sassy\nsassiest sassy\nsauccier saucy\nsaucciest saucy\nsavvier savvy\nsavviest savvy\nscabbier scabby\nscabbiest scabby\nscalier scaly\nscaliest scaly\nscantier scanty\nscantiest scanty\nscarier scary\nscariest scary\nscraggier scraggy\nscraggiest scraggy\nscragglier scraggly\nscraggliest scraggly\nscrappier scrappy\nscrappiest scrappy\nscrawnier scrawny\nscrawniest scrawny\nscrewier screwy\nscrewiest screwy\nscrubbier scrubby\nscrubbiest scrubby\nscruffier scruffy\nscruffiest scruffy\nscungier scungy\nscungiest scungy\nscurvier scurvy\nscurviest scurvy\nseamier seamy\nseamiest seamy\nseedier seedy\nseediest seedy\nseemlier seemly\nseemliest seemly\nsexier sexy\nsexiest sexy\nshabbier shabby\nshabbiest shabby\nshadier shady\nshadiest shady\nshaggier shaggy\nshaggiest shaggy\nshakier shaky\nshakiest shaky\nshapelier shapely\nshapeliest shapely\nshier shy\nshiest shy\nshiftier shifty\nshiftiest shifty\nshinier shiny\nshiniest shiny\nshirtier shirty\nshirtiest shirty\nshoddier shoddy\nshoddiest shoddy\nshowier showy\nshowiest showy\nshrubbier shrubby\nshrubbiest shrubby\nshyer shy\nshyest shy\nsicklier sickly\nsickliest sickly\nsightlier sightly\nsightliest sightly\nsilkier silky\nsilkiest silky\nsillier silly\nsilliest silly\nsketchier sketchy\nsketchiest sketchy\nskimpier skimpy\nskimpiest skimpy\nskinnier skinny\nskinniest skinny\nslaphappier slaphappy\nslaphappiest slaphappy\nslatier slaty\nslatiest slaty\nsleazier sleazy\nsleaziest sleazy\nsleepier sleepy\nsleepiest sleepy\nslier sly\nsliest sly\nslimier slimy\nslimiest slimy\nslimmer slim\nslimmest slim\nslimsier slimsy\nslimsiest slimsy\nslinkier slinky\nslinkiest slinky\nslippier slippy\nslippiest slippy\nsloppier sloppy\nsloppiest sloppy\nslyer sly\nslyest sly\nsmarmier smarmy\nsmarmiest smarmy\nsmellier smelly\nsmelliest smelly\nsmokier smoky\nsmokiest smoky\nsmugger smug\nsmuggest smug\nsnakier snaky\nsnakiest snaky\nsnappier snappy\nsnappiest snappy\nsnatchier snatchy\nsnatchiest snatchy\nsnazzier snazzy\nsnazziest snazzy\nsniffier sniffy\nsniffiest sniffy\nsnootier snooty\nsnootiest snooty\nsnottier snotty\nsnottiest snotty\nsnowier snowy\nsnowiest snowy\nsnuffier snuffy\nsnuffiest snuffy\nsnugger snug\nsnuggest snug\nsoapier soapy\nsoapiest soapy\nsoggier soggy\nsoggiest soggy\nsonsier sonsy\nsonsiest sonsy\nsootier sooty\nsootiest sooty\nsoppier soppy\nsoppiest soppy\nsorrier sorry\nsorriest sorry\nsoupier soupy\nsoupiest soupy\nspeedier speedy\nspeediest speedy\nspicier spicy\nspiciest spicy\nspiffier spiffy\nspiffiest spiffy\nspikier spiky\nspikiest spiky\nspindlier spindly\nspindliest spindly\nspinier spiny\nspiniest spiny\nsplashier splashy\nsplashiest splashy\nspongier spongy\nspongiest spongy\nspookier spooky\nspookiest spooky\nspoonier spoony\nspooniest spoony\nsportier sporty\nsportiest sporty\nspottier spotty\nspottiest spotty\nsprier spry\nspriest spry\nsprightlier sprightly\nsprightliest sprightly\nspringier springy\nspringiest springy\nsquashier squashy\nsquashiest squashy\nsquiffier squiffy\nsquiffiest squiffy\nstagier stagy\nstagiest stagy\nstalkier stalky\nstalkiest stalky\nstarchier starchy\nstarchiest starchy\nstarrier starry\nstarriest starry\nstatelier stately\nstateliest stately\nsteadier steady\nsteadiest steady\nstealthier stealthy\nstealthiest stealthy\nsteamier steamy\nsteamiest steamy\nstingier stingy\nstingiest stingy\nstockier stocky\nstockiest stocky\nstodgier stodgy\nstodgiest stodgy\nstonier stony\nstoniest stony\nstormier stormy\nstormiest stormy\nstreakier streaky\nstreakiest streaky\nstreamier streamy\nstreamiest streamy\nstretchier stretchy\nstretchiest stretchy\nstringier stringy\nstringiest stringy\nstripier stripy\nstripiest stripy\nstronger strong\nstrongest strong\nstroppier stroppy\nstroppiest stroppy\nstuffier stuffy\nstuffiest stuffy\nstumpier stumpy\nstumpiest stumpy\nsturdier sturdy\nsturdiest sturdy\nsulkier sulky\nsulkiest sulky\nsultrier sultry\nsultriest sultry\nsunnier sunny\nsunniest sunny\nsurlier surly\nsurliest surly\nswankier swanky\nswankiest swanky\nswarthier swarthy\nswarthiest swarthy\nsweatier sweaty\nsweatiest sweaty\ntackier tacky\ntackiest tacky\ntalkier talky\ntalkiest talky\ntangier tangy\ntangiest tangy\ntanner tan\ntannest tan\ntardier tardy\ntardiest tardy\ntastier tasty\ntastiest tasty\ntattier tatty\ntattiest tatty\ntawdrier tawdry\ntawdriest tawdry\ntechier techy\ntechiest techy\nteenier teeny\nteeniest teeny\ntestier testy\ntestiest testy\ntetchier tetchy\ntetchiest tetchy\nthinner thin\nthinnest thin\nthirstier thirsty\nthirstiest thirsty\nthornier thorny\nthorniest thorny\nthreadier thready\nthreadiest thready\nthriftier thrifty\nthriftiest thrifty\nthroatier throaty\nthroatiest throaty\ntidier tidy\ntidiest tidy\ntimelier timely\ntimeliest timely\ntinier tiny\ntiniest tiny\ntinnier tinny\ntinniest tinny\ntipsier tipsy\ntipsiest tipsy\ntonier tony\ntoniest tony\ntoothier toothy\ntoothiest toothy\ntouchier touchy\ntouchiest touchy\ntrashier trashy\ntrashiest trashy\ntrendier trendy\ntrendiest trendy\ntrickier tricky\ntrickiest tricky\ntricksier tricksy\ntricksiest tricksy\ntrimmer trim\ntrimmest trim\ntruer true\ntruest true\ntrustier trusty\ntrustiest trusty\ntubbier tubby\ntubbiest tubby\nturfier turfy\nturfiest turfy\ntweedier tweedy\ntweediest tweedy\ntwiggier twiggy\ntwiggiest twiggy\nuglier ugly\nugliest ugly\nunfriendlier unfriendly\nunfriendliest unfriendly\nungainlier ungainly\nungainliest ungainly\nungodlier ungodly\nungodliest ungodly\nunhappier unhappy\nunhappiest unhappy\nunhealthier unhealthy\nunhealthiest unhealthy\nunholier unholy\nunholiest unholy\nunrulier unruly\nunruliest unruly\nuntidier untidy\nuntidiest untidy\nvastier vasty\nvastiest vasty\nviewier viewy\nviewiest viewy\nwackier wacky\nwackiest wacky\nwanner wan\nwannest wan\nwarier wary\nwariest wary\nwashier washy\nwashiest washy\nwavier wavy\nwaviest wavy\nwaxier waxy\nwaxiest waxy\nweaklier weakly\nweakliest weakly\nwealthier wealthy\nwealthiest wealthy\nwearier weary\nweariest weary\nwebbier webby\nwebbiest webby\nweedier weedy\nweediest weedy\nweenier weeny\nweeniest weeny\nweensier weensy\nweensiest weensy\nweepier weepy\nweepiest weepy\nweightier weighty\nweightiest weighty\nwetter wet\nwettest wet\nwhackier whacky\nwhackiest whacky\nwhimsier whimsy\nwhimsiest whimsy\nwieldier wieldy\nwieldiest wieldy\nwilier wily\nwiliest wily\nwindier windy\nwindiest windy\nwinier winy\nwiniest winy\nwinterier wintery\nwinteriest wintery\nwintrier wintry\nwintriest wintry\nwirier wiry\nwiriest wiry\nwispier wispy\nwispiest wispy\nwittier witty\nwittiest witty\nwonkier wonky\nwonkiest wonky\nwoodier woody\nwoodiest woody\nwoodsier woodsy\nwoodsiest woodsy\nwoollier woolly\nwoolliest woolly\nwoozier woozy\nwooziest woozy\nwordier wordy\nwordiest wordy\nworldlier worldly\nworldliest worldly\nwormier wormy\nwormiest wormy\nworthier worthy\nworthiest worthy\nwrier wry\nwriest wry\nwryer wry\nwryest wry\nyarer yare\nyarest yare\nyeastier yeasty\nyeastiest yeasty\nyounger young\nyoungest young\nyummier yummy\nyummiest yummy\nzanier zany\nzaniest zany\nzippier zippy\nzippiest zippy\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-1.6-Exceptions/adv.exc",
    "content": "best well\nbetter well\ndeeper deeply\nfarther far\nfurther far\nharder hard\nhardest hard\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-1.6-Exceptions/buildExeptionDB.pl",
    "content": "#!/usr/bin/perl -w\nuse DB_File;\n@ARGV!=3&&die \"Usage: buildExceptionDB.pl WordNet-exception-file-directory exception-file-extension output-file\\n\";\nopendir(DIR,$ARGV[0])||die \"Cannot open directory $ARGV[0]\\n\";\ntie %exceptiondb,'DB_File',\"$ARGV[2]\",O_CREAT|O_RDWR,0640,$DB_HASH or\n    die \"Cannot open exception db file for output: $ARGV[2]\\n\";\nwhile(defined($file=readdir(DIR))) {\n    if($file=~/\\.$ARGV[1]$/o) {\n\tprint $file,\"\\n\";\n\topen(IN,\"$file\")||die \"Cannot open exception file: $file\\n\";\n\twhile(defined($line=<IN>)) {\n\t    chomp($line);\n\t    @tmp=split(/\\s+/,$line);\n\t    $exceptiondb{$tmp[0]}=$tmp[1];\n\t    print $tmp[0],\"\\n\";\n\t}\n\tclose(IN);\n    }\n}\nuntie %exceptiondb;\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-1.6-Exceptions/noun.exc",
    "content": "aardwolves aardwolf\nabaci abacus\nabacuses abacus\nabbacies abbacy\nabhenries abhenry\nabilities ability\nabnormalities abnormality\naboideaus aboideau\naboideaux aboideau\naboiteaus aboiteau\naboiteaux aboiteau\nabos abo\nabscissae abscissa\nabscissas abscissa\nabsurdities absurdity\nacademies academy\nacanthi acanthus\nacanthuses acanthus\nacari acarus\naccelerandos accelerando\naccessaries accessary\naccessories accessory\nacciaccaturas acciaccatura\nacciaccature acciaccatura\nacclivities acclivity\naccuracies accuracy\nacerbities acerbity\nacetabula acetabulum\nachaemenidae achaemenid\nachaemenides achaemenid\nachaemenids achaemenid\nacicula aciculum\naciculae acicula\naciculums aciculum\nacidities acidity\nacini acinus\nacouchies acouchy\nacouchis acouchi\nacre-feet acre-foot\nacrimonies acrimony\nacromia acromion\nactiniae actinia\nactinias actinia\nactivities activity\nactualities actuality\nactuaries actuary\nadagios adagio\naddenda addendum\nadenectomies adenectomy\nadenocarcinomas adenocarcinoma\nadenocarcinomata adenocarcinoma\nadenoidectomies adenoidectomy\nadenomas adenoma\nadenomata adenoma\nadieus adieu\nadieux adieu\nadmen adman\nadmiralties admiralty\nadulteries adultery\nadversaries adversary\nadversities adversity\nadvocacies advocacy\nadygeis adygei\nadyghes adyghe\nadyta adytum\naecia aecium\naecidia aecidium\naeries aery\naerobes aerobe\naerobia aerobium\naetiologies aetiology\naffinities affinity\naficionados aficionado\nafros afro\nafterbodies afterbody\nagencies agency\nagents-general agent-general\naggiornamenti aggiornamento\nagnonomina agnomen\nagones agon\nagonies agony\nagorae agora\nagoras agora\nagouties agouti\nagoutis agouti\naides-de-camp aide-de-camp\naides-memoire aide-memoire\naids-de-camp aid-de-camp\nailanthuses ailanthus\nainus ainu\naircraftmen aircraftman\naircraftwomen aircraftswoman aircraftwoman\nairmen airman\nais ai\nakans akan\nalae ala\nalbinos albino\nalchemies alchemy\nalderflies alderfly\naldermen alderman\nalewives alewife\naliases alias\nalibis alibi\nalkalies alkali\nalkalis alkali\nalkies alkie alky\nallegories allegory\nallegrettos allegretto\nallegros allegro\nallergies allergy\nallies ally\nallodia allodium\nallods allod\nalluvia alluvium\nalluviums alluvium\nalmohades almohade\nalmohads almohad\nalmonries almonry\nalmsmen almsman\nalmswomen almswoman\nalodia alodium\naloes aloe\nalto-relievos alto-relievo alto-rilievo\naltocumuli altocumulus\naltos alto\naltostrati altostratus\nalulae alula\nalumnae alumna\nalumni alumnus\nalveoli alveolus\namanuenses amanuensis\nambaries ambary\nambaris ambari\nambiguities ambiguity\nambos ambo\nambries ambry aumbry\nambulacra ambulacrum\nambulatories ambulatory\namebae ameba\namebas ameba\namenities amenity\namici_curiae amicus_curiae\namigos amigo\namities amity\namnesties amnesty\namninia amnion\namniocenteses amniocentesis\namnions amnion\namoebae amoeba\namoebiases amoebiasis\namoretretti amoretto\namoretti amoretto\namorini amorino\namoririni amorino\namphiarthroses amphiarthrosis\namphibolies amphiboly\namphibologies amphibology\namphicia amphithecium\namphictyonies amphictyony\namphigories amphigory\namphigouris amphigouri\namphimixes amphimixis\namphioxi amphioxus\namphioxuses amphioxus\namphisbaenae amphisbaena\namphisbaenas amphisbaena\namphorae amphora\namphoras amphora\nampullae ampulla\namygdalae amygdala\nanabaenas anabaena\nanabases anabasis\nanacolutha anacoluthon\nanacruses anacrusis\nanaerobes anaerobe\nanaerobia anaerobium\nanagnorises anagnorisis\nanalemmas analemma\nanalemmata analemma\nanalogies analogy\nanalyses analysis\nanamneses anamnesis\nanamorphoses anamorphosis\nanastomoses anastomosis\nanathemas anathema\nanatomies anatomy\nanattos anatto\nanatyxes anaptyxis\nanburies anbury\nancestries ancestry\nanchovies anchovy\nancillaries ancillary\nancones ancon ancone\nandantinos andantino\nandroclinia androclinium\nandroecia androecium\nandrosphinges androsphinx\nandrosphinxes androsphinx\nangelenos angeleno\nangelfishes angelfish\nangiomas angioma\nangiomata angioma\nangularities angularity\nangwantibos angwantibo\nanimalcula animalculum\nanimalcules animalcule\nanimosities animosity\nanis ani\nankuses ankus\nanlagen anlage\nanlages anlage\nannattos anatto annatto\nanniversaries anniversary\nannuities annuity\nannuli annulus\nannuluses annulus\nanomalies anomaly\nantae anta\nantalkalies antalkali\nantalkalis antalkali\nantefixa antefix\nantefixes antefix\nantelopes antelope\nantennae antenna\nantependia antependium\nanthelia anthelion\nanthelices anthelix\nanthemia anthemion\nantheridiia antheridium\nanthodia anthodium\nanthologies anthology\nanthraces anthrax\nantibodies antibody\nanticlinonoria anticlinorium\nantihelices antihelix\nantihelixes antihelix\nantiheroes antihero\nantilogies antilogy\nantineutrinos antineutrino\nantinomies antinomy\nantipastos antipasto\nantipathies antipathy\nantiphonaries antiphonary\nantiphonies antiphony\nantiquaries antiquary\nantiquities antiquity\nantisera antiserum\nantiserums antiserum\nantitheses antithesis\nantitragi antitragus\nantra antrum\nanus anus\nanxieties anxiety\nanybodies anybody\naortae aorta\naortas aorta\napaches apache\naparejos aparejo\napemen apeman\naperies apery\napexes apex\naphelia aphelion\naphides aphis\napiaries apiary\napices apex\napodoses apodosis\napollos apollo\napologies apology\napomixes apomixis\naponeuroses aponeurosis\napophyses apophysis\naposiopeses aposiopesis\napostasies apostasy\napothecaries apothecary\napothecia apothecium\napotheoses apotheosis\napparatus apparatus\napparatuses apparatus\nappendices appendix\nappendictomies appendectomy appendicectomy\nappendixes appendix\nappetences appetence\nappetencies appetency\nappoggiaturas appoggiatura\nappoggiature appoggiatura\napsides apsis\naquae aqua\naquaria aquarium\naquariums aquarium\naquas aqua\naraglis argali\narapahos arapaho\narbitraries arbitrary\narboreta arboretum\narboretums arboretum\narbutuses arbutus\narcana arcanum\narchdeaconries archdeaconry\narchduchies archduchy\narchegonia archegonium\narchenemies archenemy\narcherfishes archerfish\narchespores archespore\narchesporia archesporium\narchipelagoes archipelago\narchipelagos archipelago\narcs-boutants arc-boutant\nareolae areola\nareolas areola\nargali argali\nargals argal\nargumenta argumentum\nariettas arietta\nariette arietta\nariettes ariette\naristae arista\naristocracies aristocracy\narmadillos armadillo\narmamentariia armamentarium\narmamentariums armamentarium\narmfuls armful\narmies army\narmories armory\narmouries armoury\narpeggios arpeggio\narrises arris\narroyos arroyo\narses arsis\nartal rotl\nartel rotl\narteries artery\narterioscleroses arteriosclerosis\nartillerymen artilleryman\naruspices aruspex\nasceses ascesis\nasci ascus\nascidcidia ascidium\nascogonia ascogonium\nashkenazim ashkenazi\naspergilla aspergillum\naspergilli aspergillus\naspergilloses aspergillosis\naspergills aspergill\naspergillums aspergillum\nasperities asperity\naspersoria aspersorium\naspirins aspirin\nassagais assagai\nassegais assagai assegai\nassemblies assembly\nassemblymen assemblyman\nassiduities assiduity\nastragali astragalus\nasyndeta asyndeton\natamans ataman\natheromas atheroma\natheromata atheroma\natheroscleroses atherosclerosis\natlases atlas\natmolyses atmolysis\natomies atomy\natria atrium\natrocities atrocity\natrophies atrophy\nattorneys-at-law attorney-at-law\nauditoria auditorium\nauditoriums auditorium\nauguries augury\naunties auntie aunty\naurae aura\naurar eyrir\nauras aura\naurei aureus\nauriculae auricula\nauriculas auricula\naurorae aurora\nauroras aurora\nauspices auspex auspice\nausterities austerity\nautarchies autarchy\nautarkies autarky\nauthorities authority\nautoantibodies autoantibody\nautobiographies autobiography\nautocatalyses autocatalysis\nautochthones autochthon\nautochthons autochthon\nautocracies autocracy\nautogiros autogiro\nautogyros autogyro\nautomata automaton\nautomatons automaton\nautonomies autonomy\nautopsies autopsy\nautos auto\nautos-da-fe auto-da-fe\nautotomies autotomy\nauxiliaries auxiliary\naviaries aviary\navitaminoses avitaminosis\navocados avocado\naxes ax axis\naxillae axilla\naxillaries axillary\naxises axis\naymaras aymara\nazerbaijanis azerbaijani\nbabies baby\nbacchantes bacchant bacchante\nbacchants bacchant\nbacchii bacchius\nbacilli bacillus\nbackwoodsmen backwoodsman\nbacteriostases bacteriostasis\nbacula baculum\nbaculums baculum\nbaddies baddie baddy\nbadmen badman\nbaggies baggy\nbagies bagie\nbagmen bagman\nbagnios bagnio\nbahts baht\nbailsmen bailsman\nbains-marie bain-marie\nbakeries bakery\nbakras bakra\nbalconies balcony\nballistae ballista\nbaluchis baluchi\nbambaras bambara\nbambini bambino\nbambinos bambino\nbandeaux bandeau\nbanderilleros banderillero\nbandies bandy\nbandits bandit\nbanditti bandit\nbandsmen bandsman\nbandy-bandies bandy-bandy\nbaneberries baneberry\nbani ban\nbanjoes banjo\nbanjos banjo\nbankruptcies bankruptcy\nbantus bantu\nbaptisteries baptistery\nbaptistries baptistry\nbarbarities barbarity\nbarberries barberry\nbargees bargee\nbargemen bargeman\nbarklice barklouse\nbarmen barman\nbaronetcies baronetcy\nbaronies barony\nbarotses barotse\nbarracudas barracuda\nbarramundas barramunda\nbarramundies barramundi\nbarramundis barramundi\nbarrancas barranca\nbarrancos barranco\nbarrios barrio\nbasemen baseman\nbases base basis\nbases-on-balls base_on_balls\nbases_on_balls base_on_balls\nbasidia basidium\nbasidiia basidium\nbasileis basileus\nbasothos basotho\nbassi basso\nbassos basso\nbastinadoes bastinado\nbasutos basuto\nbateaux bateau\nbatfishes batfish\nbaths bath\nbatmen batman\nbatsmen batsman\nbatteries battery\nbatwomen batwoman\nbayberries bayberry\nbead-rubies bead-ruby\nbeadsmen beadsman bedesman\nbeaneries beanery\nbeanies beanie beany\nbeanos beano\nbearberries bearberry\nbears bear\nbeaus beau\nbeauties beauty\nbeaux beau\nbeccaficos beccafico\nbeches-de-mer beche-de-mer\nbechuanas bechuana\nbedesmen bedesman\nbedouins bedouin\nbeentos beento\nbeetflies beetfly\nbeeves beef\nbehooves behoof\nbelfries belfry\nbellies belly\nbellmen bellman\nbembas bemba\nbeneficiaries beneficiary\nbenignities benignity\nbenis beni\nbennies benny\nberries berry\nbersaglieri bersagliere\nbestialities bestiality\nbestiaries bestiary\nbetonies betony\nbevies bevy\nbevvies bevvy\nbhishties bheesty bhishti\nbibliographies bibliography\nbibliothecae bibliotheca\nbibliothecas bibliotheca\nbicennaries bicentenary bicentennial\nbicepses biceps\nbiddies biddy\nbiddy-biddies biddy-biddy\nbigamies bigamy\nbigeyes bigeye\nbighorns bighorn\nbigotries bigotry\nbijoux bijou\nbilberries bilberry\nbilboes bilbo\nbilbos bilbo\nbillets-doux billet-doux\nbillfishes billfish\nbillies billy\nbillions billion\nbillycans billycan\nbimboes bimbo\nbimbos bimbo\nbimillenaries bimillenary\nbimonthlies bimonthly\nbinaries binary\nbinderies bindery\nbingeys bingey\nbingies bingy\nbiographies biography\nbiopsies biopsy\nbioscopies bioscopy\nbirdmen birdman\nbiros biro\nbisectrices bisectrix\nbistouries bistoury\nbistros bistro\nbivvies bivvy\nbiweeklies biweekly\nblackberries blackberry\nblackfeet blackfoot\nblackfishes blackfish\nblackflies blackfly\nblasphemies blasphemy\nblastemas blastema\nblastemata blastema\nblastulae blastula\nblastulas blastula\nblauboks blaubok\nblazonries blazonry\nblennies blenny\nblesboks blesbok\nblesbucks blesbuck\nblindfishes blindfish\nblindstoreys blindstorey\nblindstories blindstory\nbloomeries bloomery\nblowfishes blowfish\nblowflies blowfly\nblueberries blueberry\nbluefishes bluefish\nboarfishes boarfish\nboatmen boatman\nbobberies bobbery\nbobbies bobby\nbodies body\nbogeymen bogeyman\nbogies bogy\nbok boschbok\nbolas bola\nbolases bolas\nboleros bolero\nboleti boletus\nboletuses boletus\nbolivares bolivar\nbolivars bolivar\nbolivianos boliviano\nbolos bolo\nbolsheviki bolshevik\nbolsheviks bolshevik\nbolshies bolshie bolshy\nboluses bolus\nbondsmen bondsman\nbonefishes bonefish\nbongoes bongo\nbongos bongo\nbonitoes bonito\nbonitos bonito\nbonteboks bontebok\nboo-boos boo-boo\nboobies booby\nboohoos boohoo\nbookbindereries bookbindery\nbooklice booklouse\nbookshelves bookshelf\nbooths booth\nbooties booty\nboraces borax\nboraxes borax\nborborygmi borborygmus\nbordellos bordello\nbordereaux bordereau\nborzois borzoi\nboschboks boschbok\nbosses boss\nbotanies botany\nbotargoes botargo\nbotflies botfly\nbothies bothy\nbottomries bottomry\nbotulinuses botulinus\nbouncing_betties bouncing_betty\nboundaries boundary\nbounties bounty\nbowmen bowman\nbox-kodaks box_kodak\nboxberries boxberry\nboxfishes boxfish\nboysenberries boysenberry\nbozos bozo\nbrachia brachium\nbrachylogies brachylogy\nbraggadocios braggadocio\nbrahmanis brahmani\nbrahmans brahman\nbrahmins brahmin\nbrahuis brahui\nbrainchildren brainchild\nbrakemen brakeman\nbrakesmen brakesman\nbranchiae branchia\nbrandies brandy\nbrants brant brent\nbrassies brassie brassy\nbravadoes bravado\nbravados bravado\nbravoes bravo\nbravos bravo\nbreadfruits breadfruit\nbregmata bregma\nbrents brent\nbrethren brother\nbreviaries breviary\nbrevities brevity\nbreweries brewery\nbriberies bribery\nbrills brill\nbrionies briony\nbroadleaves broadleaf\nbrollies brolly\nbronchi bronchus\nbronchos broncho\nbroncos bronco\nbrothers-in-law brother-in-law\nbrumbies brumby\nbrutalities brutality\nbryonies briony bryony\nbuboes bubo\nbuckoes bucko\nbuckteeth bucktooth\nbuddies buddy\nbuffaloes buffalo\nbuffalos buffalo\nbugaboos bugaboo\nbuggies buggy\nbullae bulla\nbullies bully\nbuncos bunco\nbunde bund\nbunds bund\nbunkos bunko\nbunnies bunny\nburberries burberry\nburbots burbot\nbureaucracies bureaucracy\nbureaus bureau\nbureaux bureau\nburglaries burglary\nburgoos burgoo\nburgundies burgundy\nburoos buroo\nburros burro\nbursae bursa\nbursaries bursary\nbursas bursa\nbusbies busby\nbuses bus\nbushbabies bushbaby\nbushbok boschbok\nbushboks boschbok\nbushbucks bushbuck\nbushies bushie bushy\nbushmen bushman\nbusinessmen businessman\nbusinesswomen businesswoman\nbusses bus\nbusybodies busybody\nbutcheries butchery\nbutleries butlery\nbutterfishes butterfish\nbutterflies butterfly\nbutteries buttery\nbutties butty\nbyes bye\nbyssi byssus\nbyssuses byssus\ncaballeros caballero\ncabbies cabby\ncabmen cabman\ncacophonies cacophony\ncacti cactus\ncactuses cactus\ncaddies caddie caddy\ncaddisflies caddisfly\ncadences cadence\ncadencies cadency\ncadis cadi\ncaducei caduceus\ncaeca caecum\ncaestuses caestus\ncaesurae caesura\ncaesuras caesura\ncaimans caiman\ncalami calamus\ncalamities calamity\ncalathi calathus\ncalcanei calcaneum calcaneus\ncalces calx\ncalculi calculus\ncaldaria caldarium\ncalefactories calefactory\ncalices calix\ncalicoes calico\ncalicos calico\ncalli callus\ncallosities callosity\ncalluses callus\ncalories calorie calory\ncalumnies calumny\ncalvaries calvary\ncalves calf\ncalxes calx\ncalyces calyx\ncalypsos calypso\ncalyxes calyx\ncambia cambium\ncambiums cambium\ncameos cameo\ncamerae camera\ncameramen cameraman\ncamerlengos camerlengo\ncamerlingos camerlingo\ncamisades camisade\ncamisados camisado\ncampos campo\ncampuses campus\ncanaliculi canaliculus\ncanaries canary\ncandelabra candelabrum\ncandelabras candelabra\ncandelabrums candelabrum\ncandies candy\ncandleberries candleberry\ncandlefishes candlefish\ncanneries cannery\ncannonries cannonry\ncannons cannon\ncannulas cannula\ncanonries canonry\ncanopies canopy\ncanthi canthus\ncantos canto\ncanulae canula\ncanulas canula\ncanvasbacks canvasback\ncanzoni canzone\ncapabilities capability\ncapacities capacity\ncapillaries capillary\ncapita caput\ncapitula capitulum\ncapitularies capitulary\ncapos capo\ncappuccinos cappuccino\ncapricci capriccio\ncapriccios capriccio\ncaprices caprice\ncaptivities captivity\ncarabaos carabao\ncarabinieri carabiniere\ncaravansaries caravansary\ncaravanserais caravanserai\ncarbies carby\ncarbonadoes carbonado\ncarbonados carbonado\ncarcinomas carcinoma\ncarcinomata carcinoma\ncargoes cargo\ncargos cargo\ncaribous caribou\ncaribs carib\ncarides caryatid\ncarinae carina\ncarinas carina\ncarmen carman\ncaroli carolus\ncaroluses carolus\ncarpi carpus\ncarpogonia carpogonium\ncarps carp\ncarries carry\ncarryings-on carrying-on\ncartularies cartulary\ncaryatids caryatid\ncaryopses caryopsis\ncaryopsides caryopsis\ncasinos casino\ncassowaries cassowary\ncastellanies castellany\ncastrati castrato\ncastratos castrato\ncasualties casualty\ncasuistries casuistry\ncatabases catabasis\ncataclases cataclasis\ncataloes catalo\ncatalos catalo\ncatalyses catalysis\ncatawbas catawba\ncatchflies catchfly\ncatchpennies catchpenny\ncategories category\ncatenae catena\ncatenaries catenary\ncatfishes catfish\ncathari cathar\ncatharists catharist\ncathars cathar\ncathexes cathexis\ncattaloes cattalo\ncatteries cattery\ncatties cattie catty\ncattlemen cattleman\ncaucuses caucus\ncaudexes caudex\ncaudices caudex\ncaudillos caudillo\ncaules caulis\ncausalities causality\ncauteries cautery\ncavallas cavalla\ncavallies cavally\ncavalries cavalry\ncavalrymen cavalryman\ncavatine cavatina\ncavefishes cavefish\ncavemen caveman\ncavetti cavetto\ncavies cavy\ncavities cavity\ncavo-relievos cavo-relievo\ncavo-rilievi cavo-rilievo\ncaymans cayman\ncayugas cayuga\nceca cecum\ncelebrities celebrity\ncellae cella\ncellos cello\ncembali cembalo\ncembalos cembalo\ncemeteries cemetery\ncensuses census\ncentauries centaury\ncentavos centavo\ncentenaries centenary\ncentesimi centesimo\ncentesimos centesimo\ncentillions centillion\ncentimos centimo\ncentos cento\ncentra centrum\ncentralities centrality\ncentrums centrum\ncenturies century\ncephalothoraces cephalothorax\ncephalothoraxes cephalothorax\nceratoduses ceratodus\ncercariae cercaria\ncercariiae cercaria\ncerci cercus\ncerebella cerebellum\ncerebellums cerebellum\ncerebra cerebrum\ncerebrums cerebrum\nceremonies ceremony\nceros cero\ncertainties certainty\ncervices cervix\ncervixes cervix\ncessionaries cessionary\ncestuses caestus\ncesurae cesura\ncesuras cesura\nchadarim cheder\nchaetae chaeta\nchainmen chainman\nchairmen chairman\nchaise_longues chaise_longue\nchaises_longues chaise_longue\nchalazae chalaza\nchalazas chalaza\nchalcedonies chalcedony\nchalcidflies chalcidfly\nchallahs challah\nchalloth hallah\nchalutzim chalutz\nchamperties champerty\nchams cham\nchancelleries chancellery\nchancellories chancellory\nchanceries chancery\nchandleries chandlery\nchanteys chantey\nchanties chanty\nchantries chantry\nchapaties chapati\nchapatis chapati\nchapatties chapatti\nchapattis chapatti\nchapeaus chapeau\nchapeaux chapeau\ncharacteries charactery\ncharities charity\ncharladies charlady\ncharrs charr\nchars char\nchartularies chartulary\ncharwomen charwoman\nchateaus chateau\nchateaux chateau\nchazanim chazan\nchazans chazan\nchechens chechen\ncheckerberries checkerberry\nchedarim cheder\nchefs-d'ouvre chef-d'ouvre\nchelae chela\nchelicerae chelicera\nchemistries chemistry\ncherokees cherokee\ncherries cherry\ncherubim cherub\ncherubs cherub\nchesses chess\nchessmen chessman\nchevaux-de-frise cheval-de-frise\nchewas chewa\ncheyennes cheyenne\nchiaroscuros chiaroscuro\nchiasmas chiasma\nchiasmata chiasma\nchiasmi chiasmus\nchiasms chiasm\nchicaneries chicanery\nchicanos chicano\nchiccories chiccory\nchickabiddies chickabiddy\nchickasaws chickasaw\nchicories chicory\nchicos chico\nchildren child\nchillies chilli\nchinaberries chinaberry\nchinamen chinaman\nchinese_eddoes chinese_eddo\nchinooks chinook\nchinos chino\nchippewas chippewa\nchippeways chippeway\nchippies chippie chippy\nchitarroni chitarrone\nchivalries chivalry\nchochos chocho\nchoctaws choctaw\nchokeberries chokeberry\nchokecherries chokecherry\nchokos choko\ncholecystectomies cholecystectomy\nchondromas chondroma\nchondromata chondroma\nchoragi choragus\nchoraguses choragus\nchoriamambi choriambus\nchoriambs choriamb\nchorizos chorizo\nchoruses chorus\nchoux chou\nchrestomathies chrestomathy\nchrismatories chrismatory\nchristies christy\nchromonemata chromonema\nchromos chromo\nchronologies chronology\nchrysalides chrysalis\nchrysalises chrysalis\nchubs chub\nchurchmen churchman\nchurchwomen churchwoman\nchuringas churinga\nchuvashes chuvash\nciboria ciborium\ncicadae cicada\ncicadas cicada\ncicalas cicala\ncicale cicala\ncicatrices cicatrix\ncicelies cicely\ncicerones cicerone\nciceroni cicerone\nciceros cicero\ncicisbei cicisbeo\ncigarillos cigarillo\nciggies ciggy\ncigs cig\ncilia cilium\ncimices cimex\ncineraria cinerarium\ncingula cingulum\ncircuities circuity\ncircuses circus\ncirri cirrus\ncirrocumuli cirrocumulus\ncirrostrati cirrostratus\nciscoes cisco\nciscos cisco\ncisternae cisterna\ncities city\ncitizenries citizenry\ncitruses citrus\ncivies civvy\ncivilities civility\ncivvies civvy\nclani clarino\nclanos clarino\nclansmen clansman\nclanswomen clanswoman\nclaries clary\nclaroes claro\nclaros claro\nclavicembalos clavicembalo\nclearstories clearstory\nclemencies clemency\nclepsydrae clepsydra\nclepsydras clepsydra\nclerestories clerestory\nclergies clergy\nclergymen clergyman\ncleruchies cleruchy\nclinandria clinandrium\nclingfishes clingfish\nclitella clitellum\ncloacae cloaca\nclostridiia clostridium\nclostridiums clostridium\ncloths cloth\ncloudberries cloudberry\ncloverleaves cloverleaf\nclubmen clubman\nclubwomen clubwoman\nclypei clypeus\ncoachmen coachman\ncoagula coagulum\ncoalfishes coalfish\ncoati-mondis coati-mondi\ncoati-mundis coati-mundi\ncoatis coati\ncocci coccus\ncoccyges coccyx\ncochleae cochlea\ncockatoos cockatoo\ncocksfoots cocksfoot\ncockshies cockshy\ncocos coco\ncodfishes codfish\ncodices codex\ncods cod\ncoelentera coelenteron\ncoenuri coenurus\ncognomens cognomen\ncognomina cognomen\ncohos coho\ncola colon\ncolectomies colectomy\ncoleorhizae coleorhiza\ncoleuses coleus\ncolies coly\ncollectivities collectivity\ncollegigia collegium\ncollegigiums collegium\ncollieries colliery\ncollies colly\ncolloquia colloquium\ncolloquies colloquy\ncolloquiums colloquium\ncolluvia colluvium\ncolluviums colluvium\ncollyria collyrium\ncollyriums collyrium\ncolones colon\ncolonies colony\ncolons colon\ncolossi colossus\ncolossuses colossus\ncolostomies colostomy\ncolotomies colotomy\ncoloureds coloured\ncolourmen colourman\ncoltsfoots coltsfoot\ncolugos colugo\ncolumbariia columbarium\ncolumellae columella\ncomae coma\ncomanches comanche\ncomas coma\ncomatulae comatula\ncomatulids comatulid\ncombos combo\ncombtooth_blennies combtooth_blenny\ncomedies comedy\ncomedones comedo\ncomedos comedo\ncomities comity\ncommandoes commando\ncommandos commando\ncommentaries commentary\ncommies commie commy\ncommissaries commissary\ncommitteemen committeeman\ncommodities commodity\ncommonalities commonality\ncommonalties commonalty\ncommos commo\ncommunities community\ncompanies company\ncompetencies competency\ncomplacences complacence\ncomplacencies complacency\ncomplexities complexity\ncomplicacies complicacy\ncomplicities complicity\ncompos compo\nconcavities concavity\nconcertanti concertante\nconcerti concerto\nconcerti_grossi concerto_grosso\nconcertini concertino\nconcerto_grossos concerto_grosso\nconcertos concerto\nconcessionaries concessionary\nconchae concha\nconches conch\nconchies conchie conchy\nconchs conch\nconcinnities concinnity\ncondominiums condominium\ncondottieri condottiere\nconductivities conductivity\ncondylomas condyloma\ncondylomata condyloma\nconeys coney\nconfectionaries confectionary\nconfectioneries confectionery\nconfederacies confederacy\nconfervae conferva\nconfervas conferva\nconformances conformance\nconformities conformity\nconfraternities confraternity\ncongii congius\ncongress-gaiters congress-gaiter\ncongressmen congressman\ncongresswomen congresswoman\nconidia conidium\nconidnidia conidium\nconies cony\nconjunctivae conjunctiva\nconjunctivas conjunctiva\nconquistadores conquistador\nconquistadors conquistador\nconservancies conservancy\nconservatories conservatory\nconsistences consistence\nconsistencies consistency\nconsistories consistory\nconsonances consonance\nconsonancies consonancy\nconsonannancies consonancy\nconsortia consortium\nconspiracies conspiracy\nconstabularies constabulary\nconstituencies constituency\ncontagia contagium\ncontangos contango\ncontemporaries contemporary\ncontingencies contingency\ncontinua continuum\ncontinuities continuity\ncontinuos continuo\ncontinuums continuum\ncontos conto\ncontradictories contradictory\ncontralti contralto\ncontraltos contralto\ncontraries contrary\ncontrarieties contrariety\ncontributories contributory\ncontroversies controversy\ncontumacies contumacy\ncontumelies contumely\nconventionalities conventionality\nconversaziozioni conversazione\nconvexities convexity\nconvolvuli convolvulus\nconvolvuluses convolvulus\ncookies cookie cooky\ncooks-general cook-general\ncoolies coolie cooly\ncooperies coopery\ncopies copy\ncopulae copula\ncopulas copula\ncoquetries coquetry\ncoquitos coquito\ncorantos coranto\ncorbiculae corbicula\ncordialities cordiality\ncoria corium\ncorneae cornea\ncorneas cornea\ncornetcies cornetcy\ncornua cornu\ncorodies corody\ncorollaries corollary\ncoronae corona\ncoronaries coronary\ncoronas corona\ncorozos corozo\ncorpora corpus\ncorpsmen corpsman\ncorrigenda corrigendum\ncorrodies corrody\ncortices cortex\ncortinae cortina\ncorybantes corybant\ncorybants corybant\ncoryphaei coryphaeus\ncosies cosy\ncosignatories cosignatory\ncosmogonies cosmogony\ncosmoses cosmos\ncostae costa\ncostmaries costmary\ncostotomies costotomy\ncothurni cothurnus\ncothurns cothurn\ncottonseeds cottonseed\ncouncilmen councilman\ncounter-revolutionaries counter-revolutionary\ncounterspies counterspy\ncounties county\ncountries country\ncountrymen countryman\ncourt_martials court_martial\ncourts_martial court_martial\ncouteaux couteau\ncowberries cowberry\ncowfishes cowfish\ncowmen cowman\ncowries cowrie cowry\ncoxae coxa\ncoxcombries coxcombry\ncoyotes coyote\ncoyotillos coyotillo\ncoypus coypu\ncozies cozy\ncracksmen cracksman\ncraftsmen craftsman\ncragsmen cragsman\ncramboes crambo\ncranberries cranberry\ncrania cranium\ncraniotomies craniotomy\ncraniums cranium\ncrannies cranny\ncrappies crappie\ncrases crasis\ncrawfishes crawfish\ncrayfishes crayfish\ncreameries creamery\ncredenda credendum\ncredos credo\ncreeks creek\ncreepy-crawlies creepy-crawly\ncrees cree\ncrematoria crematorium\ncrematoriums crematorium\ncrescendi crescendo\ncrescendos crescendo\ncribella cribellum\ncries cry\ncriminalities criminality\ncriollos criollo\ncrises crisis\ncrissa crissum\ncristae crista\ncriteria criterion\ncriterions criterion\ncrocuses crocus\ncronies crony\ncrowberries crowberry\ncrowfoots crowfoot\ncruces crux\ncrudities crudity\ncruelties cruelty\ncrummies crummy\ncrura crus\ncrusadoes crusado\ncrusados crusado\ncruxes crux\ncruzadoes cruzado\ncruzados cruzado\ncruzeiros cruzeiro\ncrybabies crybaby\ncrying cry\ncryings cry\ncryoscopies cryoscopy\nctenidiia ctenidium\ncubicula cubiculum\ncuckoos cuckoo\ncuddies cuddie cuddy\ncul-de-sacs cul-de-sac\nculices culex\ncullies cully\nculpae culpa\nculs-de-sac cul-de-sac\nculti cultus\ncultuses cultus\ncumuli cumulus\ncumulonimbi cumulonimbus\ncumulonimbuses cumulonimbus\ncumulostrati cumulostratus\ncuracies curacy\ncurculios curculio\ncuriae curia\ncurios curio\ncuriosities curiosity\ncurrencies currency\ncurricula curriculum\ncurriculums curriculum\ncurrieries curriery\ncurries curry\ncurtseys curtsey\ncurtsies curtsy\ncusks cusk\ncustodes custos\ncustodies custody\ncustomaries customary\ncustoms_duties customs_duty\ncutcheries cutchery\ncutcherries cutcherry\ncutes cutis\ncuticulae cuticula\ncutises cutis\ncutties cutty\ncuttlefishes cuttlefish\ncyclopes cyclops\ncyclopses cyclops\ncycloses cyclosis\ncylices cylix\ncylikes cylix\ncymae cyma\ncymas cyma\ncymatia cymatium\ncymbalos cymbalo\ncypselae cypsela\ncystectomies cystectomy\ncysticerci cysticercus\ncystotomies cystotomy\ndaces dace\ndacoities dacoity\ndactylologies dactylology\ndaddies daddy\ndadoes dado\ndados dado\ndagoes dago\ndagos dago\ndailies daily\ndaimyos daimyo\ndainties dainty\ndaiquiris daiquiri\ndairies dairy\ndairymen dairyman\ndaisies daisy\ndalesmen dalesman\ndamaras damara\ndamselfishes damselfish\ndamselflies damselfly\ndandies dandy\ndanios danio\ndarkeys darkey\ndarkies darky\ndata datum\ndataries datary\ndatos dato\ndaughters-in-law daughter-in-law\ndayaks dayak\ndayflies dayfly\ndaymio daimio\ndaymios daimio\ndeaconries deaconry\ndealfishes dealfish\ndeaneries deanery\ndearies dearie deary\ndebilities debility\ndecemviri decemvir\ndecemvirs decemvir\ndecencies decency\ndecennaries decennary\ndecennia decennium\ndecenniums decennium\ndeciduae decidua\ndeciduas decidua\ndeclivities declivity\ndecuries decury\ndeers deer\ndeficiencies deficiency\ndefinienda definiendum\ndefinientia definiens\ndeformities deformity\ndegeneracies degeneracy\ndeities deity\ndelawares delaware\ndelegacies delegacy\ndeles dele\ndelicacies delicacy\ndelinquencies delinquency\ndeliveries delivery\ndelphiniia delphinium\ndelphiniums delphinium\ndemagogies demagogy\ndemies demy\ndemocracies democracy\ndemos demo\ndenarnarii denarius\ndensities density\ndentalia dentalium\ndentaliums dentalium\ndependencies dependency\ndepilatories depilatory\ndepositaries depositary\ndepositories depository\ndepravities depravity\ndeputies deputy\nderbies derby\ndermatotoses dermatosis\ndesiderata desideratum\ndesmans desman\ndesperadoes desperado\ndesperados desperado\ndestinies destiny\ndevilfishes devilfish\ndevilries devilry\ndeviltries deviltry\ndewberries dewberry\ndiabolos diabolo\ndiaereses diaeresis\ndiaerses diaeresis\ndiagnoses diagnosis\ndialyses dialysis\ndianthuses dianthus\ndiaphyses diaphysis\ndiapophyses diapophysis\ndiarchies diarchy dyarchy\ndiaries diary\ndiarthroses diarthrosis\ndiastalses diastalsis\ndiastases diastasis\ndiastemata diastema\ndiathermancies diathermancy\ndiathses diathesis\ndiazoes diazo\ndiazos diazo\ndibbukkim dibbuk\ndibbuks dibbuk\ndichasia dichasium\ndichotomies dichotomy\ndickeys dickey\ndickies dicky\ndicta dictum\ndictionaries dictionary\ndictums dictum\ndidakais didakai\ndiddicoys diddicoy\ndidoes dido\ndidos dido\ndiereses dieresis\ndieses diesis\ndietaries dietary\ndifferentiae differentia\ndifficulties difficulty\ndigamies digamy\ndignitaries dignitary\ndignities dignity\ndildoes dildoe\ndildos dildo\ndilettantes dilettante\ndilettanti dilettante\ndillies dilly\ndiluvia diluvium\ndiminuendos diminuendo\ndimities dimity\ndingeys dingey\ndinghies dinghy\ndingies dingy\ndingoes dingo\ndinkas dinka\ndiplococci diplococcus\ndiplodocuses diplodocus\ndiplomacies diplomacy\ndipodies dipody\ndirectories directory\ndirectors-general director-general\ndisabilities disability\ndisci discus\ndiscoboli discobolos discobolus\ndiscommodities discommodity\ndisconformities disconformity\ndiscontinuities discontinuity\ndiscos disco\ndiscourtesies discourtesy\ndiscoveries discovery\ndiscrepancies discrepancy\ndiscuses discus\ndisharmonies disharmony\ndishonesties dishonesty\ndisloyalties disloyalty\ndisparities disparity\ndispensaries dispensary\ndispensatories dispensatory\ndissimilarities dissimilarity\ndissymmetries dissymmetry\ndistilleries distillery\ndistributaries distributary\ndisunities disunity\ndittanies dittany\nditties ditty\ndittographies dittography\ndivas diva\ndive diva\ndiverticula diverticulum\ndivertimenti divertimento\ndivi-divis divi-divi\ndivinities divinity\ndjinn djinni djinny\ndobbies dobby\ndobros dobro\ndobsonflies dobsonfly\ndocumentaries documentary\ndodoes dodo\ndodos dodo\ndoes doe\ndogberries dogberry\ndogeys dogey\ndogfishes dogfish\ndoggeries doggery\ndoggies doggie doggy\ndogies dogie dogy\ndogmas dogma\ndogmata dogma\ndogsbodies dogsbody\ndogteeth dogtooth\ndohs doh\ndojos dojo\ndollarfishes dollarfish\ndollies dolly\ndolmans dolman\ndomesticities domesticity\ndominoes domino\ndominos domino\ndoormen doorman\ndories dory\ndormice dormouse\ndormitories dormitory\ndorsa dorsum\ndos do\ndowdies dowdy\ndoweries dowery\ndowries dowry\ndoxies doxie doxy\ndoxologies doxology\ndoyleys doyley\ndoylies doyly\ndozens dozen\ndrachmae drachma\ndrachmas drachma\ndraftsmen draftsman\ndragomans dragoman\ndragomen dragoman\ndragonflies dragonfly\ndrains drain\ndraperies drapery\ndraughtsmen draughtsman\ndrawknives drawknife\ndrawshaves drawshave\ndries dry\ndroits droit\ndrolleries drollery\ndromedaries dromedary\ndrongos drongo\ndroshkies droshky\ndroskies drosky\ndrosophilae drosophila\ndrosophilas drosophila\ndrudgeries drudgery\ndrumfishes drumfish\ndrunk_and_disorderlies drunk_and_disorderly\ndryades dryad\ndryads dryad\ndrys dry\ndualas duala\ndualities duality\ndubieties dubiety\ndubiosities dubiosity\nduchies duchy\nduellos duello\ndui duo\nduikers duiker\ndummies dummy\ndunnies dunny\nduodecimos duodecimo\nduomos duomo\nduona duodenum\nduonas duodenum\nduos duo\nduplicities duplicity\ndupondii dupondius\nduppies duppy\nduros duro\ndustmen dustman\ndutchmen dutchman\nduties duty\nduumviri duumvir\nduumvirs duumvir\ndwarfs dwarf\ndwarves dwarf\ndyaks dyak\ndyarchies dyarchy\ndybbukkim dybbuk\ndybbuks dybbuk\ndynamos dynamo\ndynasties dynasty\ndyulas dyula\ndzos dzo\nealdormen ealdorman\nearthmen earthman\neasterlies easterly\nebonies ebony\neccentricities eccentricity\necchymoses ecchymosis\necclesiae ecclesia\necdyses ecdysis\nechidnae echidna\nechidnas echidna\nechini echinus\nechinococci echinococcus\nechoes echo\neconomies economy\necstasies ecstasy\neddies eddy\neddoes eddo\nedemata edema\nedos edo\neffendis effendi\nefficiencies efficiency\neffigies effigy\neffluvia effluvium\neffluviums effluvium\neffronteries effrontery\nefiks efik\negos ego\neicies eigenfrequency\neidola eidolon\neidolons eidolon\neighteenmos eighteenmo\neighties eighty\neightvos eightvo\neisegeses eisegesis\neisteddfodau eisteddfod\neisteddfods eisteddfod\nelderberries elderberry\nelectros electro\nelectuaries electuary\nelegances elegance\nelegancies elegancy\nelegies elegy\nelemis elemi\nelenchi elenchus\nelephants elephant\nelks elk\nellipses ellipsis\neluvia eluvium\nelves elf\nelytra elytron elytrum\nembargoes embargo\nembassies embassy\nembolectomies embolectomy\nemboli embolus\nembolies emboly\nembrectomies embrectomy\nembroideries embroidery\nembryectomies embryectomy\nembryos embryo\nembusques embusque\nemergencies emergency\neminences eminence\neminencies eminency\nemissaries emissary\nemmies emmy\nemmys emmy\nemphases emphasis\nemporia emporium\nemporiums emporium\nempties empty\nemunctories emunctory\nenarthroses enarthrosis\nencephala encephalon\nencephalomas encephaloma\nencephalomata encephaloma\nenchiridia enchiridion\nenchiridions enchiridion\nenchondromas enchondroma\nenchondromata enchondroma\nencomia encomium\nencomiums encomium\nendamebae endameba\nendamebas endameba\nendamoebae endamoeba\nendamoebas endamoeba\nendocardia endocardium\nendocrania endocranium\nendometria endometrium\nendostea endosteum\nendostoses endostosis\nendothecicia endothecium\nendothelia endothelium\nendotheliomata endothelioma\nenemas enema\nenemata enema\nenemies enemy\nenergies energy\nengineries enginery\nenglishmen englishman\nenglishwomen englishwoman\nenmities enmity\nenneahedra enneahedron\nenneahedrons enneahedron\nenormities enormity\nentamebae entameba\nentamebas entameba\nentamoebae entamoeba\nentamoebas entamoeba\nentases entasis\nentelechies entelechy\nentera enteron\nenterostomies enterostomy\nenterotomies enterotomy\nenteroviruses enterovirus\nentia ens\nentireties entirety\nentities entity\nentozoa entozoan entozoon\nentreaties entreaty\nentries entry\nentropies entropy\nenvies envy\neohippuses eohippus\neparchates eparchate\neparchies eparchy\nepencephala epencephalon\nepentheses epenthesis\nepexegeses epexegesis\nephemerae ephemera\nephemeras ephemera\nephemerera ephemeron\nephemererons ephemeron\nephemerides ephemeris\nephori ephor\nepibolies epiboly\nepicalyces epicalyx\nepicalyxes epicalyx\nepicanthi epicanthus\nepicardia epicardium\nepicedidia epicedium\nepicenters epicenter\nepicentres epicentre\nepicleses epiclesis\nepididymides epididymis\nepigastria epigastrium\nepiglottides epiglottis\nepiglottises epiglottis\nepimysia epimysium\nepinasties epinasty\nepiphanies epiphany\nepiphenomena epiphenomenon\nepiphyses epiphysis\nepiscopacies episcopacy\nepisiotomies episiotomy\nepisterna episternum\nepithalamia epithalamion epithalamium\nepithelia epithelium\nepitheliomas epithelioma\nepitheliomata epithelioma\nepitheliums epithelium\nepizoa epizoon\nepoxies epoxy\nepyllilia epyllion\nequalities equality\nequerries equerry\nequilibria equilibrium\nequilibriums equilibrium\nequiseta equisetum\nequisetums equisetum\nequities equity\nergatocracies ergatocracy\nergs erg\neries erie\neringoes eringo\neringos eringo\nermines ermine\nerrancies errancy\nerrantries errantry\nerrata erratum\neryngoes eryngo\nescolars escolar\nescudos escudo\neskies esky\neskimos eskimo\nesophagi esophagus\nesophaguses esophagus\nespartos esparto\nespressos espresso\nesquimaus esquimau\nestuaries estuary\neternities eternity\netiologies etiology\netuis etui\netyma etymon\netymologies etymology\netymons etymon\neucalypti eucalyptus\neucalypts eucalypt\neucalyptuses eucalyptus\neulachans eulachan\neulachons eulachon\neulogies eulogy\neupatridae eupatrid\neupatrids eupatrid\neuphonies euphony\neuphrasies euphrasy\neuripi euripus\neventualities eventuality\newes ewe\nex-servicemen ex-serviceman\nexanthemas exanthema\nexanthemata exanthema\nexanthems exanthem\nexarchates exarchate\nexarchies exarchy\nexcellences excellence\nexcellencies excellency\nexcisemen exciseman\nexcrescencies excrescency\nexcursuses excursus\nexecutrices executrix\nexecutrixes executrix\nexegeses exegesis\nexempla exemplum\nexigences exigence\nexigencies exigency\nexordia exordium\nexordiums exordium\nexostoses exostosis\nexpediences expedience\nexpediencies expediency\nexpiries expiry\nexpos expo\nexternalities externality\nextradoses extrados\nextrema extremum\nextremities extremity\neyeteeth eyetooth\nfabliaux fabliau\nfaciae facia\nfacilities facility\nfactories factory\nfaculae facula\nfaculties faculty\nfaeries faerie faery\nfaeroese faeroese\nfairies fairy\nfallacies fallacy\nfallfishes fallfish\nfalsettos falsetto\nfalsities falsity\nfamiliarities familiarity\nfamilies family\nfamuli famulus\nfancies fancy\nfandangos fandango\nfangs fang\nfannies fanny\nfantasies fantasy\nfantis fanti\nfarcies farcy\nfarmers-general farmer-general\nfaroese faroese\nfarragoes farrago\nfarrieries farriery\nfasciae fascia\nfasciculi fasciculus\nfatalities fatality\nfathers-in-law father-in-law\nfatsoes fatso\nfatsos fatso\nfatties fatty\nfatuities fatuity\nfaunae fauna\nfaunas fauna\nfealties fealty\nfebruaries february\nfeculae fecula\nfedayeen fedayee\nfeet foot\nfelicities felicity\nfellaheen fellah\nfellahin fellah\nfellahs fellah\nfellies felly\nfelloes felloe\nfelones_de_se felo_de_se\nfelonies felony\nfelonries felonry\nfelos_de_se felo_de_se\nfemora femur\nfemurs femur\nfenestellae fenestella\nfenestrae fenestra\nferetories feretory\nferiae feria\nferias feria\nferities ferity\nfermatas fermata\nfermate fermata\nferneries fernery\nferries ferry\nferulae ferula\nferulas ferula\nfervencies fervency\nfestivities festivity\nfestschriften festschrift\nfestschrifts festschrift\nfetiales fetial\nfeudalities feudality\nfezzes fez\nfiascoes fiasco\nfiascos fiasco\nfibrillae fibrilla\nfibrils fibril\nfibromas fibroma\nfibromata fibroma\nfibulae fibula\nfibulas fibula\nficoes fico\nfideicommissa fideicommissum\nfideicommissaries fideicommissary\nfidelities fidelity\nfieldmice fieldmouse\nfieldsmen fieldsman\nfifties fifty\nfigs. fig.\nfila filum\nfilariiae filaria\nfilefishes filefish\nfilipinos filipino\nfillies filly\nfils fil\nfimbriae fimbria\nfinalities finality\nfineries finery\nfinfoots finfoot\nfingos fingo\nfireflies firefly\nfiremen fireman\nfisheries fishery\nfishermen fisherman\nfishes fish\nfishflies fishfly\nfishwives fishwife\nfistulae fistula\nfistulas fistula\nfixities fixity\nflabella flabellum\nflagella flagellum\nflagellums flagellum\nflagmen flagman\nflagpoles flagpole\nflagstaffs flagstaff\nflagstaves flagstaff\nflambeaus flambeau\nflambeaux flambeau\nflamencos flamenco\nflamens flamen\nflamines flamen\nflamingoes flamingo\nflamingos flamingo\nflatfeet flatfoot\nflatfishes flatfish\nflatfoots flatfoot\nflatheads flathead\nflatteries flattery\nflatuses flatus\nfleurs-de-lis fleur-de-lis\nfleurs-de-lys fleur-de-lys\nflies fly\nflights_of_stairs flight_of_stairs\nflittermice flittermouse\nflocci floccus\nflocculi flocculus\nfloosies floosie\nfloozies floozie\nflorae flora\nfloras flora\nfloreant. floreat\nflorilegia florilegium\nflounders flounder\nflowers-de-luce flower-de-luce\nflummeries flummery\nflunkeys flunkey\nflunkies flunky\nflurries flurry\nflybys flyby\nflyleaves flyleaf\nfoci focus\nfocuses focus\nfoemen foeman\nfoetuses foetus\nfogeys fogey\nfogies fogy\nfoilsmen foilsman\nfolia folium\nfolios folio\nfolks folk\nfollies folly\nfooleries foolery\nfootmen footman\nfopperies foppery\nfora forum\nforamens foramen\nforamina foramen\nforceps forceps\nforefeet forefoot\nforemen foreman\nforeteeth foretooth\nforgeries forgery\nformalities formality\nformicaria formicarium\nformicaries formicary\nformulae formula\nformularies formulary\nformulas formula\nfornices fornix\nfortes fortis\nforties forty\nfortnightlies fortnightly\nfortuities fortuity\nforums forum\nfossae fossa\nfoundries foundry\nfoveae fovea\nfoveolae foveola\nfoxes fox\nfractocumuli fractocumulus\nfractostrati fractostratus\nfraena fraenum\nfragrances fragrance\nfragrancies fragrancy\nfrailties frailty\nfrangipanis frangipani\nfraternities fraternity\nfrauen frau\nfrauleins fraulein\nfraus frau\nfreedmen freedman\nfreemen freeman\nfrena frenum\nfrenchies frenchy\nfrenchmen frenchman\nfrenula frenulum\nfrenzies frenzy\nfrequencies frequency\nfrescoes fresco\nfrescos fresco\nfreshers fresher\nfreshmen freshman\nfriaries friary\nfricandeaus fricandeau\nfricandeaux fricandeau\nfricandoes fricando\nfriendlies friendly\nfries fry\nfrijoles frijol\nfripperies frippery\nfritillaries fritillary\nfrogfishes frogfish\nfroggies froggy\nfrogmen frogman\nfrogs frog\nfrontes frons\nfrontiersmen frontiersman\nfrusta frustum\nfrustums frustum\nfuci fucus\nfucuses fucus\nfuddy-duddies fuddy-duddy\nfugios fugio\nfuglemen fugleman\nfulas fula\nfulcra fulcrum\nfulcrums fulcrum\nfumatoria fumatorium\nfumatories fumatory\nfumatoriums fumatorium\nfumitories fumitory\nfunctionaries functionary\nfundi fundus\nfungi fungus\nfunguses fungus\nfuniculi funiculus\nfunnies funny\nfurcula furculum\nfurculae furcula\nfurfures furfur\nfuries fury\nfurrieries furriery\nfutilities futility\nfuturities futurity\nfuzzy-wuzzies fuzzy-wuzzy\ng-men g-man\ngabbros gabbro\ngabies gaby\ngadflies gadfly\ngadwalls gadwall\ngaieties gaiety\ngalagos galago\ngalaxies galaxy\ngaleae galea\ngalibis galibi\ngallantries gallantry\ngallas galla\ngalleries gallery\ngallflies gallfly\ngallimaufries gallimaufry\ngallowses gallows\ngalvos galvo\ngambades gambade\ngambadoes gambado\ngambados gambado\ngametangia gametangium\ngammadidia gammadion\ngandas ganda\nganglia ganglion\nganglions ganglion\ngantries gantry\ngarbanzos garbanzo\ngarbos garbo\ngarfishes garfish\ngars gar\ngas gas\ngases gas\ngasmen gasman\ngasses gas\ngastrectomies gastrectomy\ngastroenterostomies gastroenterostomy\ngastrostomies gastrostomy\ngastrotomies gastrotomy\ngastrulae gastrula\ngastrulas gastrula\ngateaux gateau\ngauchos gaucho\ngauderies gaudery\ngauntries gauntry\ngazeboes gazebo\ngazebos gazebo\ngazelles gazelle\ngeckoes gecko\ngeckos gecko\ngeese goose\ngeishas geisha\ngelsemia gelsemium\ngelsemiums gelsemium\ngemboks gemsbok\ngembucks gemsbuck\ngemeinschaften gemeinschaft\ngemmae gemma\ngenealogies genealogy\ngenera genus\ngeneralissimos generalissimo\ngeneralities generality\ngeneratrices generatrix\ngenerosities generosity\ngeneses genesis\ngenevans genevan\ngenii genius\ngeniuses genius\ngentes gens\ngentilities gentility\ngentlemen gentleman\ngentlemen-at-arms gentleman-at-arms\ngentlemen-farmers gentleman-farmer\ngentlewomen gentlewoman\ngenua genu\ngenus genus\ngenuses genus\ngeographies geography\ngermens germen\ngermina germen\ngerontocracies gerontocracy\ngesellschaften gesellschaft\ngestalten gestalt\ngestalts gestalt\ngharries gharri gharry\nghazis ghazi\nghettoes ghetto\nghettos ghetto\ngibbosities gibbosity\ngigantomachias gigantomachia\ngigantomachies gigantomachy\ngigolos gigolo\ngildsmen gildsman\ngildswomen gildswoman\ngingivae gingiva\ngingkoes gingko\nginglymi ginglymus\nginkgoes ginkgo\ngippies gippy\ngippoes gippo\ngipsies gipsy\ngiraffes giraffe\ngiros giro\ngis gi\nglabellae glabella\nglacises glacis\ngladioli gladiolus\ngladioluses gladiolus\nglandes glans\nglassmen glassman\ngleemen gleeman\nglengarries glengarry\ngliomas glioma\ngliomata glioma\nglissandi glissando\nglissandos glissando\nglobefishes globefish\nglobigerinae globigerina\nglobigerinas globigerina\nglochidchidia glochidium\nglomeruli glomerulus\nglories glory\nglossae glossa\nglossaries glossary\nglossas glossa\nglossectomies glossectomy\nglossies glossy\nglottides glottis\nglottises glottis\nglutaei glutaeus\nglutei gluteus\ngluttonies gluttony\ngnoses gnosis\ngnus gnu\ngoatfishes goatfish\ngobies goby\ngoboes gobo\ngobos gobo\ngodchildren godchild\ngoes go\ngoings-over going-over\ngoldeneyes goldeneye\ngoldeyes goldeye\ngoldfishes goldfish\ngollies golly\ngombos gombo\ngomphoses gomphosis\ngonidiia gonidium\ngoninia gonion\ngonococci gonococcus\ngoodies goody\ngoodmen goodman\ngoodwives goodwife\ngoody-goodies goody-goody\ngooglies googly\ngooseberries gooseberry\ngoosefishes goosefish\ngoosefoots goosefoot\ngooses goose\ngorgoneineia gorgoneion\ngospopoda gospodin\ngouramis gourami\ngovernor_generals governor_general\ngovernors_general governor_general\ngoyim goy\ngoys goy\ngraciosos gracioso\ngraduses gradus\ngrafen graf\ngraffiti graffito\ngrampuses grampus\ngranaries granary\ngrandchildren grandchild\ngranddaddies granddaddy\ngranddads granddad\ngrannies grannie granny\ngrants-in-aid grant-in-aid\ngranulomas granuloma\ngranulomata granuloma\ngrapefruits grapefruit\ngratuities gratuity\ngravavamina gravamen\ngravies gravy\ngravities gravity\ngraylings grayling\ngreegrees greegree\ngreeneries greenery\ngreenflies greenfly\ngrig-gris gris-gris\ngrigris grigri\ngrikwas grikwa\ngrilses grilse\ngrinderies grindery\ngringos gringo\ngriquas griqua\ngrislies grisly\ngrizzlies grizzly\ngroceries grocery\ngroomsmen groomsman\ngrosses gross\ngroszy grosz\ngrotesqueries grotesquerie grotesquery\ngrottoes grotto\ngrottos grotto\ngroundsmen groundsman\ngroupers grouper\ngrouses grouse\nguacharos guacharo\nguacos guaco\nguanacos guanaco\nguanos guano\nguaranis guarani\nguaranties guaranty\nguardsmen guardsman\nguilder guilde\nguilders guilde guilder\nguitarfishes guitarfish\ngujeratis gujerati\nguldens gulden\ngullahs gullah\ngullies gully\ngumbos gumbo\ngummas gumma\ngummata gumma\ngunmen gunman\ngunnies gunny\nguppies guppy\ngurkhas gurkha\ngurnard gurnar\ngurnards gurnar gurnard\ngurnets gurnet\nguttae gutta\ngutties gutty\ngymnasia gymnasium\ngymnasiums gymnasium\ngynaecea gynaeceum\ngynaecia gynaecium\ngynaecocracies gynaecocracy gynecocracy\ngynarchies gynarchy\ngynecea gynecium\ngynecia gynecium\ngynoecea gynoecium\ngynoecia gynoecium\ngypsies gypsy\ngyri gyrus\ngyros gyro\nha'pennies ha'penny\nhabaneros habanero\nhaberdasheries haberdashery\nhackberries hackberry\nhadarim heder\nhaddocks haddock\nhadjes hadj\nhadjis hadji\nhaecceities haecceity\nhaematolyses haematolysis\nhaematomas haematoma\nhaematomata haematoma\nhaematozozoa haematozoon\nhaemodialyses haemodialysis\nhaemolyses haemolysis\nhaemoptyses haemoptysis\nhaemorrhoidectomies haemorrhoidectomy\nhaeredes haeres\nhaftarahs haftarah\nhaftaroth haftarah\nhagfishes hagfish\nhaggadahs haggadah\nhaggadas haggada haggadah\nhaggadoth haggada\nhagiarchies hagiarchy\nhagiocracies hagiocracy\nhagiographies hagiography\nhagiologies hagiology\nhaidas haida\nhairdos hairdo\nhajis haji\nhajjes hajj\nhajjis hajji\nhakes hake\nhalers haler\nhaleru haler\nhalibuts halibut\nhallahs hallah\nhalloas halloa\nhalloos halloo\nhallos hallo\nhallot hallah\nhalloth hallah\nhaloes halo\nhalos halo\nhalteres halter haltere\nhalves half\nhamuli hamulus\nhandfuls handful\nhandymen handyman\nhangers-on hanger-on\nhangmen hangman\nhankies hankie hanky\nhaphtarahs haphtarah\nhaphtaroth haphtarah\nhaphtatarahs haphtarah\nhaphtataroth haphtarah\nhaplographies haplography\nhardies hardy\nhares hare\nharmonies harmony\nharpies harpy\nharquebuses harquebus\nharts hart\nharuspices haruspex\nharvestmen harvestman\nhatcheries hatchery\nhausas hausa\nhaustella haustellum\nhaustoria haustorium\nhazans hazan\nhazzanim hazzan\nhazzans hazzan\nhe-men he-man\nheadmen headman\nheadsmen headsman\nheathberries heathberry\nheathens heathen\nheavies heavy\nhectocotyli hectocotylus\nhegemonies hegemony\nheirs-at-law heir-at-law\nheldentetenore heldentenor\nhelianthuses helianthus\nhelices helix\nhelixes helix\nhellos hello\nhematolyses hematolysis\nhematomas hematoma\nhematomata hematoma\nhematozozoa hematozoon\nhemelytra hemelytron\nhemielytra hemielytron\nhemodialyses hemodialysis\nhemolyses hemolysis\nhemoptyses hemoptysis\nhemorrhoidectomies hemorrhoidectomy\nhenchmen henchman\nhendecahedra hendecahedron\nhendecahedrons hendecahedron\nhenneries hennery\nhenries henry\nhenrys henry\nhens-and-chickens hen-and-chickens\nheptarchies heptarchy\nheraclidae heraclid\nheraklidae heraklid\nheraldries heraldry\nherbariia herbarium\nherbariums herbarium\nherdsmen herdsman\nheredities heredity\nheresies heresy\nhermae herm herma\nhermai herma\nherms herm\nherniae hernia\nhernias hernia\nherniorrhaphies herniorrhaphy\nheroes hero\nheronries heronry\nheros herero\nherren herr\nherrings herring\nhetaerae hetaera\nhetairai hetaira\nheteroplasties heteroplasty\nhetmans hetman\nhexapodies hexapody\nhiatuses hiatus\nhibernacles hibernacle\nhibernacula hibernaculum\nhibiscuses hibiscus\nhickories hickory\nhidalgos hidalgo\nhieracosphinges hieracosphinx\nhieracosphinxes hieracosphinx\nhierarchies hierarchy\nhierocracies hierocracy\nhierologies hierology\nhighwaymen highwayman\nhila hilum\nhillbillies hillbilly\nhimatia himation\nhindoos hindoo\nhinds hind\nhindus hindu\nhinnies hinny\nhippies hippie hippy\nhippocampi hippocampus\nhippopotami hippopotamus\nhippopotamuses hippopotamus\nhippos hippo\nhistories history\nhobbies hobby\nhoboes hobo\nhobos hobo\nhodmen hodman\nhogfishes hogfish\nholibuts holibut\nholies holy\nhollas holla\nhollies holly\nhollos hollo\nhomilies homily\nhomologies homology\nhomos homo\nhomunculi homunculus\nhonesties honesty\nhonkies honky\nhonorariia honorarium\nhonorariums honorarium\nhoodoos hoodoo\nhoofs hoof\nhootenannies hootenanny\nhootnannies hootnanny\nhooves hoof\nhopis hopi\nhorologia horologium\nhoroscopies horoscopy\nhors_d'oeuvres hors_d'oeuvre\nhorseflies horsefly\nhorsemen horseman\nhospitalities hospitality\nhostelries hostelry\nhostilities hostility\nhottentots hottentot\nhouris houri\nhouseflies housefly\nhousemen houseman\nhouses house\nhousewives housewife\nhubbies hubby\nhuckleberries huckleberry\nhullaballoos hullaballoo\nhullabaloos hullabaloo\nhullos hullo\nhumanities humanity\nhumeri humerus\nhumilities humility\nhumpies humpy\nhundreds hundred\nhundredweights hundredweight\nhuntsmen huntsman\nhurdy-gurdies hurdy-gurdy\nhurly-burlies hurly-burly\nhurons huron\nhurries hurry\nhusbandmen husbandman\nhuskies husky\nhussies hussy\nhutus hutu\nhydrae hydra\nhydras hydra\nhydromedusae hydromedusa\nhydromedusas hydromedusa\nhydros hydro\nhymenoptera hymenopteran\nhymenopterans hymenopteran\nhymenopterons hymenopteron\nhynia hymenium\nhyniums hymenium\nhypanthia hypanthium\nhyperostoses hyperostosis\nhypertrophies hypertrophy\nhyphae hypha\nhypnoses hypnosis\nhypochondria hypochondrium\nhypocrisies hypocrisy\nhypogastria hypogastrium\nhypogea hypogeum\nhypophyses hypophysis\nhypos hypo\nhypostases hypostasis\nhypothalami hypothalamus\nhypotheses hypothesis\nhyraces hyrax\nhyraxes hyrax\nhysterectomies hysterectomy\nhysterotomies hysterotomy\niambi iamb\niambs iamb\niambuses iambus\nibexes ibex\nibibios ibibio\nibices ibex\nibises ibis\nibo igbo\nibos ibo\nichthyosauri ichthyosaurus\nichthyosaurs ichthyosaur\nichthyosauruses ichthyosaur ichthyosaurus\niconographies iconography\niconostases iconostas iconostasis\nicosahedra icosahedron\nicosahedrons icosahedron\nictuses ictus\nideata ideatum\nidentities identity\nideologies ideology\nidiocies idiocy\nidiopathies idiopathy\nidiosyncrasies idiosyncrasy\nigbos igbo\nigloos igloo\niglus iglu\nignominies ignominy\nignoramuses ignoramus\nigorots igorot\nigorrorote igorrote\nigorrotes igorrote\nileostomies ileostomy\nilia ilium\nimageries imagery\nimagines imago\nimagoes imago\nimbroglios imbroglio\nimmediacies immediacy\nimmensities immensity\nimmoralities immorality\nimmunities immunity\nimpalas impala\nimparities imparity\nimpediments impediment\nimperiria imperium\nimpetuses impetus\nimpies impi\nimpieties impiety\nimpolicies impolicy\nimportunities importunity\nimpossibilities impossibility\nimpresarios impresario\nimprobities improbity\nimproprieties impropriety\nimpunities impunity\nimpurities impurity\ninaccuracies inaccuracy\ninadequacies inadequacy\ninamoratas inamorata\ninamoratos inamorato\ninanities inanity\nincapacities incapacity\nincas inca\nincendiaries incendiary\nincensories incensory\nincivilities incivility\nincognitas incognita\nincognitos incognito\nincommodities incommodity\nincongruities incongruity\ninconsistencies inconsistency\nincubi incubus\nincubuses incubus\nincudes incus\nincumbencies incumbency\nindecencies indecency\nindemnities indemnity\nindependencies independency\nindexes index\nindiamen indiaman\nindices index\nindignities indignity\nindigoes indigo\nindigos indigo\nindividualities individuality\nindusia indusium\nindustries industry\ninequalities inequality\ninequities inequity\ninfamies infamy\ninfancies infancy\ninfantries infantry\ninfantrymen infantryman\ninfelicities infelicity\ninfernos inferno\ninfidelities infidelity\ninfinities infinity\ninfirmaries infirmary\ninfirmities infirmity\ninformalities informality\ninfundibula infundibulum\ningenuities ingenuity\ningushes ingush\ninhumanities inhumanity\niniquities iniquity\ninjuries injury\ninkberries inkberry\ninnuendoes innuendo\ninnuendos innuendo\ninocula inoculum\ninoculants inoculant\ninquiries inquiry\ninquisitors-general inquisitor-general\ninsanities insanity\ninsectaria insectarium\ninsectaries insectary\ninsectariums insectarium\ninsignias insignia\ninstabilities instability\ninstrumentalities instrumentality\ninsulae insula\nintagli intaglio\nintaglios intaglio\nintensities intensity\ninterleaves interleaf\nintermediaries intermediary\nintermezzi intermezzo\nintermezzos intermezzo\ninternuncios internuncio\ninterreges interrex\ninterregna interregnum\ninterregnums interregnum\nintimacies intimacy\nintimae intima\nintradoses intrados\nintros intro\ninuits inuit\ninventories inventory\ninveracities inveracity\ninvolucella involucellum\ninvolucels involucel\ninvolucra involucrum\ninvolucres involucre\niridectomies iridectomy\nirides iris\niridotomies iridotomy\nirises iris\nirishmen irishman\nirishwomen irishwoman\nironies irony\nirregularities irregularity\nirrelevancies irrelevancy\nis is\nischia ischium\nisocracies isocracy\nisraelis israeli\nisthmi isthmus\nisthmuses isthmus\nitineraries itinerary\nivies ivy\nivories ivory\njack-in-the-boxes jack-in-the-box\njackeroos jackaroo jackeroo\njackfishes jackfish\njackknives jackknife\njacks-in-the-box jack-in-the-box\njacksmelts jacksmelt\njacksnipes jacksnipe\njacobuses jacobus\njaguarondis jaguarondi\njaguarundis jaguarundi\njalopies jalopy\njaloppies jaloppy\njambarts jambart\njambeaux jambeau\njambers jamber\njanissaries janissary\njanizaries janizary\njanuaries january\njatos jato\njats jat\njealousies jealousy\njellies jelly\njellyfishes jellyfish\njemmies jemmy\njennies jenny\njequerities jequerity\njequirities jequirity\njerries jerry\njetties jetty\njewelfishes jewelfish\njewfishes jewfish\njewries jewry\njiffies jiffy\njiffs jiff\njimmies jimmy\njingoes jingo\njinn jinni\njockos jocko\njoes jo joe\njohnnies johnny\njollities jollity\njourneymen journeyman\njournos journo\njudge_advocate_generals judge_advocate_general\njudge_advocates_general judge_advocate_general\njudiciaries judiciary\njudies judy\njulies july\njumbos jumbo\njuncos junco\njuneberries juneberry\njunkies junkie junky\njunkmen junkman\njuntos junto\njura jus\njuries jury\njurymen juryman\njusticiaries justiciary\njuvenilities juvenility\nkabyles kabyle\nkaddishim kaddish\nkadis kadi\nkaffirs kaffir\nkafirs kafir\nkakapos kakapo\nkakemonos kakemono\nkakis kaki\nkalmuck kalmuc\nkalmucks kalmuc kalmuck\nkalmyks kalmyk\nkangaroos kangaroo\nkanjis kanji\nkara-kalpaks kara-kalpak\nkarens karen\nkaroos karoo\nkarroos karroo\nkashmiris kashmiri\nkatabases katabasis\nkauries kaury\nkauris kauri\nkazakhs kazakh\nkazaks kazak\nkazoos kazoo\nkeeshonden keeshond\nkeeshonds keeshond\nkelpies kelpie kelpy\nkepis kepi\nkeratoplasties keratoplasty\nkerries kerry\nkhakis khaki\nkibbutzim kibbutz\nkiddies kiddie kiddy\nkikuyus kikuyu\nkilldeers killdeer\nkillifishes killifish\nkilos kilo\nkimonos kimono\nkingfishes kingfish\nkings-of-arms king-of-arms\nkinsmen kinsman\nkirkmen kirkman\nkitties kitty\nkiwis kiwi\nklansmen klansman\nkleenexes kleenex\nklootchmans klootchman\nklootchmen klootchman\nknaveries knavery\nknights_bachelor knight_bachelor\nknights_bachelors knight_bachelor\nknights_templar knight_templar\nknights_templars knight_templar\nknives knife\nkohlrabies kohlrabi\nkolinskies kolinsky\nkolos kolo\nkondos kondo\nkongos kongo\nkotos koto\nkrios krio\nkronen krone\nkroner krone\nkronur krona\nkrooni kroon\nkroons kroon\nkwakiutls kwakiutl\nkylikes kylix\nlabara labarum\nlabella labellum\nlabia labium\nlaboratories laboratory\nlabra labrum\nlachrymatories lachrymatory\nlactobacilli lactobacillus\nlacunae lacuna\nlacunaria lacunar\nlacunars lacunar\nlacunas lacuna\nladies lady\nladies-in-waiting lady-in-waiting\nladinos ladino\nlamaseries lamasery\nlamellae lamella\nlamellas lamella\nlamiae lamia\nlamias lamia\nlaminae lamina\nlaminas lamina\nlandladies landlady\nlandsmen landsman\nlaniaries laniary\nlanugos lanugo\nlaos lao\nlaotians laotian\nlaparotomies laparotomy\nlapidaries lapidary\nlapilli lapillus\nlapithae lapith\nlapiths lapith\nlarcenies larceny\nlarghettos larghetto\nlargos largo\nlarvae larva\nlarynges larynx\nlaryngotomies laryngotomy\nlarynxes larynx\nlassoes lasso\nlassos lasso\nlatexes latex\nlaths lath\nlati lat\nlatices latex\nlatifundia latifundium\nlats lat\nlatu lat\nlaundries laundry\nlaundrymen laundryman\nlaundrywomen laundrywoman\nlavaboes lavabo\nlavabos lavabo\nlavatories lavatory\nlawmen lawman\nlaymen layman\nlaywomen laywoman\nlazarets lazaret\nlazarettes lazarette\nlazarettos lazaretto\nleadsmen leadsman\nlean-tos lean-to\nleaves leaf leave\nlecheries lechery\nlectionaries lectionary\nlecythi lecythus\nlefties lefty\nlegacies legacy\nlegalities legality\nlegatos legato\nleges lex\nlegionaries legionary\nlegmen legman\nlei leu\nlemmas lemma\nlemmata lemma\nlemnisci lemniscus\nlenes lenis\nlengthmen lengthman\nlenities lenity\nlenos leno\nlentigines lentigo\nlentos lento\nleonides leonid\nleonids leonid\nlepidoptera lepidopteran\nlepidopterans lepidopteran\nleprosaria leprosarium\nlepta lepton\nleptocephali leptocephalus\nlethargies lethargy\nlettermen letterman\nleva lev\nlevies levy\nlevities levity\nliabilities liability\nliberalities liberality\nliberties liberty\nlibidos libido\nlibrae libra\nlibraries library\nlibretti libretto\nlibrettos libretto\nlice louse\nlieder lied\nliegemen liegeman\nliftboys liftboy\nliftmen liftman\nligulae ligula\nligulas ligula\nlilies lily\nlilos lilo\nlimbi limbus\nlimbos limbo\nlimens limen\nlimina limen\nlimites limes\nlimuli limulus\nlinctuses linctus\nlinemen lineman\nlinesmen linesman\nlingcods lingcod\nlingoes lingo\nlings ling\nlingua_francas lingua_franca\nlinguae lingua\nlinguae_francae lingua_franca\nlinkboys linkboy\nlinkmen linkman\nlionfishes lionfish\nlipomas lipoma\nlipomata lipoma\nliras lira\nlire lira\nliriodendra liriodendron\nliriodendrons liriodendron\nlistente sente\nlitai lit litas\nlitanies litany\nlithos litho\nlithotomies lithotomy\nlithotrities lithotrity\nlits lit\nlitu litas\nliturgies liturgy\nliveries livery\nliverymen liveryman\nlives life\nlixiviia lixivium\nlixiviums lixivium\nllanos llano\nloaves loaf\nlobbies lobby\nlobectomies lobectomy\nloblollies loblolly\nlobos lobo\nlobotomies lobotomy\nlobsters lobster\nlocalities locality\nloci locus\nlocomen locoman\nlocos loco\nlocules locule\nloculi loculus\nloganberries loganberry\nloggias loggia\nloggie loggia\nlogia logion\nlogomachies logomachy\nlogos logo\nlollies lolly\nlomenmenta lomentum\nloments loment\nlongbowmen longbowman\nlongobardi longobard\nlongobards longobard\nlongshoremen longshoreman\nloobies looby\nlooneys looney\nloonies loony\nloos loo\nloricae lorica\nlories lory\nlorries lorry\nlotharios lothario\nlotteries lottery\nlouses louse\nlowerclassmen lowerclassman\nloyalties loyalty\nluba luba\nlubas luba\nlubritoria lubritorium\nlullabies lullaby\nlumens lumen\nlumina lumen\nluminaries luminary\nluminosities luminosity\nlumpfishes lumpfish\nlunacies lunacy\nlungfishes lungfish\nlunies luny\nlunulae lunula\nlunules lunule\nlupercalias lupercalia\nlures lur lure\nlustra lustre\nlustrums lustrum\nluxuries luxury\nlycees lycee\nlyings-in lying-in\nlymphangitides lymphangitis\nlymphomas lymphoma\nlymphomata lymphoma\nlymphopoieses lymphopoiesis\nlynxes lynx\nlyses lysis\nlyttae lytta\nlyttas lytta\nmaare maar\nmaars maar\nmacacos macaco\nmacaronies macaroni\nmacaronis macaroni\nmaccaronies maccaroni\nmaccaronis maccaroni\nmachineries machinery\nmachzorim machzor\nmackerels mackerel\nmacronuclei macronucleus\nmacros macro\nmacrosporangia macrosporangium\nmaculae macula\nmacules macule\nmadmen madman\nmadornos madrono\nmadronas madrona\nmadrones madrone\nmaduros maduro\nmadwomen madwoman\nmaestri maestro\nmaestros maestro\nmafiosi mafioso\nmafiosos mafioso\nmagi magus\nmagisteries magistery\nmagistracies magistracy\nmagistratures magistrature\nmagmas magma\nmagmata magma\nmagnanimities magnanimity\nmagnetos magneto\nmagnificoes magnifico\nmagnums magnum\nmagyars magyar\nmahicans mahican\nmahoganies mahogany\nmahzorim mahzor\nmailmen mailman\nmajesties majesty\nmajor-axes major_axis\nmajor-domos major-domo\nmajor_axes major_axis\nmajorities majority\nmakos mako\nmakuta likuta\nmaladies malady\nmalagasies malagasy\nmalevolencies malevolency\nmalignancies malignancy\nmalignities malignity\nmalihinis malihini\nmalinkes malinke\nmallei malleus\nmalleoli malleolus\nmambos mambo\nmamillae mamilla\nmammae mamma\nmammies mammie mammy\nmammillae mammilla\nmanchus manchu\nmandamuses mandamus\nmandatories mandatory\nmandes mande\nmandingoes mandingo\nmandingos mandingo\nmangoes mango\nmangos mango\nmanifestoes manifesto\nmanifestos manifesto\nmaninkes maninke\nmanitos manito\nmanitous manitou\nmanitus manitu\nmanservants manservant\nmanteaus manteau\nmanteaux manteau\nmantes mantis\nmantises mantis\nmanubria manubrium\nmanubriums manubrium\nmanufactories manufactory\nmanxmen manxman\nmaoris maori\nmaravedis maravedi\nmarchese marchesa\nmarchesi marchese\nmaremme maremma\nmarkhoors markhoor\nmarkhors markhor\nmarkkaa markka\nmarksmen marksman\nmarlins marlin\nmarqueteries marqueterie\nmarquetries marquetry\nmarquises marquis\nmarranos marrano\nmarsupia marsupium\nmartens marten\nmartinis martini\nmartyries martyry\nmartyrologies martyrology\nmarvels-of-peru marvel-of-peru\nmasais masai\nmashies mashie mashy\nmashonas mashona\nmaskalonges maskalonge\nmaskanonges maskanonge\nmasonries masonry\nmassachusets massachuset\nmasses mass masse\nmastectomies mastectomy\nmasteries mastery\nmasters-at-arms master-at-arms\nmasticatories masticatory\nmastoidectomies mastoidectomy\nmatabeles matabele\nmaterialities materiality\nmatriarchies matriarchy\nmatrices matrix\nmatrimonies matrimony\nmatrixes matrix\nmaturities maturity\nmatzahs matzah\nmatzas matza\nmatzohs matzoh\nmatzos matzo\nmatzoth matzo\nmau-maus mau-mau\nmaubies mauby\nmaundies maundy\nmausolea mausoleum\nmausoleums mausoleum\nmaxillae maxilla\nmaxima maximum\nmayas maya\nmayflies mayfly\nmayoralties mayoralty\nmeanies meanie meany\nmeatuses meatus\nmedia medium\nmediae media\nmediastina mediastinum\nmedicos medico\nmediocrities mediocrity\nmediums medium\nmedulla_oblongatas medulla_oblongata\nmedullae medulla\nmedullae_oblongatae medulla_oblongata\nmedullas medulla\nmedusae medusa\nmedusas medusa\nmegara megaron\nmegasporangia megasporangium\nmegillahs megillah\nmegilloth megillah\nmeinies meinie meiny\nmeioses meiosis\nmeistersingers meistersinger\nmelancholies melancholy\nmelanomas melanoma\nmelanomata melanoma\nmelismas melisma\nmelismata melisma\nmelodies melody\nmementoes memento\nmementos memento\nmemoranda memorandum\nmemorandums memorandum\nmemories memory\nmemos memo\nmen man\nmen-at-arms man-at-arms\nmen-o'-war man-of-war\nmen-of-war man-of-war\nmen_of_letters man_of_letters\nmendacities mendacity\nmenisci meniscus\nmeniscuses meniscus\nmenologies menology\nmenominees menominee\nmenominis menomini\nmenstrua menstruum\nmenstruums menstruum\nmentalities mentality\nmercenaries mercenary\nmerchantmen merchantman\nmercies mercy\nmercuries mercury\nmergansers merganser\nmerinos merino\nmeritocracies meritocracy\nmermen merman\nmesdames madame\nmesdemoiselles mademoiselle\nmesenteries mesentery\nmesentertera mesenteron\nmesnalties mesnalty\nmesothoraces mesothorax\nmesothoraxes mesothorax\nmesseigneurs monseigneur\nmessieurs monsieur\nmestizoes mestizo\nmestizos mestizo\nmetacarpi metacarpus\nmetagalaxies metagalaxy\nmetamorphoses metamorphosis\nmetanephroi metanephros\nmetastases metastasis\nmetatarsi metatarsus\nmetatheses metathesis\nmetathoraces metathorax\nmetathoraxes metathorax\nmetempsychoses metempsychosis\nmetencephala metencephalon\nmetencephalons metencephalon\nmethodologies methodology\nmetifs metif\nmetonymies metonymy\nmetrologies metrology\nmetropolises metropolis\nmetros metro\nmezuzahs mezuzah\nmezuzoth mezuzah\nmezzo-sopranos mezzo-soprano\nmezzos mezzo\nmhos mho\nmiasmas miasma\nmiasmata miasma\nmice mouse\nmicmacs micmac\nmicroanalyses microanalysis\nmicrococci micrococcus\nmicrocopies microcopy\nmicronuclei micronucleus\nmicronucleuses micronucleus\nmicrosporangia microsporangium\nmicrotomies microtomy\nmiddies middy\nmiddlemen middleman\nmidinettes midinette\nmidrashim midrash\nmidshipmen midshipman\nmidwives midwife\nmiladies miladi milady\nmilia milium\nmilieus milieu\nmilieux milieu\nmilitaries military\nmilitated_against militate_against\nmilitiamen militiaman\nmilkfishes milkfish\nmilkmen milkman\nmillenaries millenary\nmillennia millennium\nmillenniums millennium\nmillions million\nmilos milo\nmimicries mimicry\nminae mina\nminas mina\nminima minimum\nminimums minimum\nministeria ministerium\nministries ministry\nminnows minnow\nminorities minority\nminstrelsies minstrelsy\nminutemen minuteman\nminutiae minutia\nminyanim minyan\nminyans minyan\nmioses miosis\nmiracidiia miracidium\nmiri mir\nmiscellanies miscellany\nmiseries misery\nmishnayoth mishna mishnah\nmissies missy\nmissionaries missionary\nmitochondria mitochondrion\nmittimuses mittimus\nmitzvahs mitzvah\nmitzvoth mitzvah\nmixtecs mixtec\nmlles mlle\nmobocracies mobocracy\nmockeries mockery\nmodalities modality\nmodernities modernity\nmodesties modesty\nmodioli modiolus\nmoduli modulus\nmohaves mohave\nmohawks mohawk\nmohicans mohican\nmoieties moiety\nmojaves mojave\nmolalities molality\nmolas mola\nmolies moly\nmollies molly\nmomenta momentum\nmomentums momentum\nmomi momus\nmomuses momus\nmonades monad monas\nmonads monad\nmonarchies monarchy\nmonasteries monastery\nmoneys money\nmongoes mongoe\nmongolians mongolian\nmongooses mongoose\nmongos mongo\nmonies money\nmonitories monitory\nmonkeries monkery\nmonkfishes monkfish\nmonochasia monochasium\nmonocracies monocracy\nmonodies monody\nmonopodia monopodium\nmonopolies monopoly\nmonopsonies monopsony\nmonoptera monopteron\nmonopteroi monopteros\nmonotonies monotony\nmons mon\nmonsignori monsignor\nmonsignors monsignor\nmonstrosities monstrosity\nmontagnards montagnard\nmonteros montero\nmonthlies monthly\nmonts-de-piete mont-de-piete\nmooncalves mooncalf\nmoonfishes moonfish\nmorae mora\nmoralities morality\nmoras mora\nmoratoria moratorium\nmoratoriums moratorium\nmorays moray\nmorceaux morceau\nmordvins mordvin\nmorellos morello\nmorescoes moresco\nmorescos moresco\nmoriscoes morisco\nmoriscos morisco\nmorning-glories morning-glory\nmoros moro\nmorphallaxes morphallaxis\nmorphoses morphosis\nmorros morro\nmortalities mortality\nmortuaries mortuary\nmorulae morula\nmorulas morula\nmosasauri mosasaurus\nmosasaurs mosasaur\nmoshavim moshav\nmoslems moslem\nmoslim moslem\nmoslims moslem\nmosothos mosotho\nmosquitoes mosquito\nmosquitos mosquito\nmossis mossi\nmother_superiors mother_superior\nmothers-in-law mother-in-law\nmothers_superior mother_superior\nmotormen motorman\nmottoes motto\nmottos motto\nmotus motu\nmounties mountie mounty\nmouthfuls mouthful\nmouths mouth\nmucosae mucosa\nmucrones mucro\nmudejares mudejar\nmudfishes mudfish\nmuftis mufti\nmulattoes mulatto\nmulattos mulatto\nmulberries mulberry\nmultiparae multipara\nmultiplicities multiplicity\nmummeries mummery\nmummies mummy\nmundas munda\nmungos mungo\nmunicipalities municipality\nmurices murex\nmurphies murphy\nmusclemen muscleman\nmuskallunge muskellunge\nmuskellunges muskellunge\nmuskies musky\nmuskrats muskrat\nmuslims muslim\nmussalmans mussalman\nmussulmans mussulman\nmustachios mustachio\nmutinies mutiny\nmycelia mycelium\nmycetomas mycetoma\nmycetomata mycetoma\nmycobacteria mycobacterium\nmycorhizas mycorhiza\nmycorrhizae mycorrhiza\nmyelencephala myelencephalon\nmyelencephalons myelencephalon\nmyiases myiasis\nmyocardia myocardium\nmyofibrillae myofibrilla\nmyomas myoma\nmyomata myoma\nmyoses myosis\nmyrmidones myrmidon\nmyrmidons myrmidon\nmysteries mystery\nmythoi mythos\nmythologies mythology\nmyxomas myxoma\nmyxomata myxoma\nnaevi naevus\nnagas naga\nnahuatls nahuatl\nnaiades naiad\nnaiads naiad\nnamaquas namaqua\nnamas nama\nnamby-pambies namby-pamby\nnannies nanny\nnaoi naos\nnappies nappy\nnarcissi narcissus\nnarcissuses narcissus\nnares naris\nnarragansets narraganset\nnarragansetts narragansett\nnaseberries naseberry\nnasopharynges nasopharynx\nnasopharynxes nasopharynx\nnatalities natality\nnatatoria natatorium\nnatatoriums natatorium\nnationalities nationality\nnativities nativity\nnaumachiae naumachia\nnaumachias naumachia\nnaumachies naumachy\nnauplii nauplius\nnautili nautilus\nnautiluses nautilus\nnavahoes navaho\nnavahos navaho\nnavajoes navajo\nnavajos navajo\nnavies navy\nnazis nazi\nnebulae nebula\nnebulas nebula\nnebulosities nebulosity\nnecessities necessity\nnecrologies necrology\nnecropoleis necropolis\nnecropolises necropolis\nnecropsies necropsy\nnecroscopies necroscopy\nnecrotomies necrotomy\nnectaries nectary\nneddies neddy\nneedlefishes needlefish\nneedlewomen needlewoman\nnegrilloes negrillo\nnegrillos negrillo\nnegritoes negrito\nnegritos negrito\nnegroes negro\nneguses negus\nnelumbos nelumbo\nnemeses nemesis\nneologies neology\nneologisms neologism\nnephrectomies nephrectomy\nnephridiia nephridium\nnephrotomies nephrotomy\nnereides nereid\nnetties netty\nneurectomies neurectomy\nneurohypophyses neurohypophysis\nneuromas neuroma\nneuromata neuroma\nneuroptera neuropteron\nneuropterans neuropteran\nneuroses neurosis\nneurotomies neurotomy\nneutrettos neutretto\nneutrinos neutrino\nnevi nevus\nnewspapermen newspaperman\nnewspaperwomen newspapermen newspaperwoman\nnibelungen nibelung\nnibelungs nibelung\nniceties nicety\nnidi nidus\nnielli niello\nniellos niello\nnighties nightie nighty\nnilgai nilgai\nnilgais nilgai\nnilghaus nilghau\nnimbi nimbus\nnimbostrati nimbostratus\nnimbuses nimbus\nnimieties nimiety\nnineties ninety\nninnies ninny\nnobilities nobility\nnoblemen nobleman\nnoblewomen noblemen noblewoman\nnobodies nobody\nnoctilucae noctiluca\nnoddies noddy\nnodi nodus\nnoes no\nnomarchies nomarchy\nnomina nomen\nnomocracries nomocracy\nnomographies nomography\nnon-resistants non-resistant\nnonentities nonentity\nnonpluses nonplus\nnorsemen norseman\nnorthcountrymen northcountryman\nnortheasterlies northeasterly\nnortherlies northerly\nnorthmen northman\nnorthwesterlies northwesterly\nnos no\nnota notum\nnotabilities notability\nnotaries notary\nnoumena noumenon\nnovae nova\nnovas nova\nnovellas novella\nnovelle novella\nnovelties novelty\nnovenae novena\nnubas nuba\nnubeculae nubecula\nnucelli nucellus\nnuchae nucha\nnuclei nucleus\nnucleoli nucleolus\nnucleuses nucleus\nnudities nudity\nnulliparae nullipara\nnullities nullity\nnumbfishes numbfish\nnumina numen\nnuncios nuncio\nnunneries nunnery\nnupes nupe\nnuris nuri\nnurseries nursery\nnurserymen nurseryman\nnyalas nyala\nnyanjas nyanja\nnylghaus nylghau\nnymphae nympha\nnympholepsies nympholepsy\nnymphos nympho\nnyoros nyoro\noarfishes oarfish\noarsmen oarsman\noases oasis\noaths oath\nobbligatos obbligato\nobeahs obeah\nobedientiaries obedientiary\nobeli obelus\nobis obi\nobituaries obituary\nobjets_d'art objet_d'art\nobligati obligato\nobliquities obliquity\nobloquies obloquy\noboli obolus\nobols obol\nobscenities obscenity\nobscurities obscurity\nobservatories observatory\nobstinacies obstinacy\noccipita occiput\nocciputs occiput\noccupancies occupancy\noceanariia oceanarium\noceanariums oceanarium\noceanides oceanid\noceanids oceanid\nocelli ocellus\nochlocracies ochlocracy\nochreae ochrea\nocotillos ocotillo\nocreae ochrea ocrea\noctahedra octahedron\noctahedrons octahedron\noctarchies octarchy\noctavos octavo\noctocentenaries octocentenary\noctodecimos octodecimo\noctogenarians octogenarian\noctogenaries octogenary\noctonaries octonary\noctopuses octopus\noddities oddity\nodea odeum\noedemata edema oedema\noesophagi esophagus oesophagus\noffertories offertory\nofficiaries officiary\noil-water_interfaces oil-water_interface\noilmen oilman\nojibwas ojibwa\nokapis okapi\noldwives oldwife\nolea oleum\noleums oleum\nolfactories olfactory\noligarchies oligarchy\noligopolies oligopoly\noligopsonies oligopsony\nolios olio\nologies ology\nomasa omasum\nomayyades omayyad\nomayyads omayyad\nombudsmen ombudsman\nomenta omentum\nommatidtidia ommatidium\nommiades ommiad\nommiads ommiad\nomnibuses omnibus\nonagers onager\nonagri onager\none-eightys one-eighty\noneidas oneida\nonondagas onondaga\nonuses onus\noogonia oogonium\noogoniums oogonium\noophorectomies oophorectomy\noothecae ootheca\nopacities opacity\nopera_serias opera_seria\noperas_seria opera_seria\nopercula operculum\noperculums operculum\nopossums opossum\nopportunities opportunity\noptima optimum\noptimums optimum\nopuses opus\nora os\norangemen orangeman\norangeries orangery\noratories oratory\noratorios oratorio\norchardmen orchardman\norderlies orderly\nordinaries ordinary\norgana organon organum\norgandies organdie organdy\norganons organon\norganums organa organum\norgies orgy\noribis oribi\noriginalities originality\norreries orrery\northodoxies orthodoxy\northographies orthography\northopterans orthopteran\northoptertera orthopteron\northostichies orthostichy\noryxes oryx\nosages osage\nosar os\noscitances oscitance\noscitancies oscitancy\noscula osculum\nosmanlis osmanli\nossa os\nossuaries ossuary\nosteomas osteoma\nosteomata osteoma\nosteoplasties osteoplasty\nosteotomies osteotomy\nostia ostium\nostiaries ostiary\nostriches ostrich\nostyaks ostyak\notters otter\nottomans othman ottoman\noutcries outcry\noutlawries outlawry\nova ovum\novambos ovambo\novariectomies ovariectomy\novaries ovary\novariotomies ovariotomy\novermen overman\novoli ovolo\novotestes ovotestis\nowelties owelty\noxen ox\noxymora oxymoron\noystermen oysterman\npachucos pachuco\npaddies paddy\npaddlefishes paddlefish\npaellas paella\npaeonies paeony\npageantries pageantry\npairs pair\npaisanos paisano\npaise paisa\npaiutes paiute\npalaestras palaestra\npaleae palea\npales pale\npalestrae palestra\npalestras palestra\npalingeneses palingenesis\npallia pallium\npalliums pallium\npalmettoes palmetto\npalmettos palmetto\npalominos palomino\npalpi palpus\npalps palp\npalsies palsy\npamperos pampero\npancratia pancratium\npandanuses pandanus\npandies pandy\npandowdies pandowdy\npanettones panettone\npanettoni panettone\npanoplies panoply\npansies pansy\npanthers panther\npantos panto\npantries pantry\npapacies papacy\npaperknives paperknife\npapillae papilla\npapillomas papilloma\npapillomata papilloma\npappi pappus\npappies pappy\npapulae papula\npapules papule\npapyri papyrus\npapyruses papyrus\nparabases parabasis\nparaleipses paraleipsis paralipsis\nparalyses paralysis\nparamecia paramecium\nparamenta parament\nparaments parament\nparamos paramo\nparaphyses paraphysis\nparapodia parapodium\nparas para\nparaselenae paraselene\nparashoth parashah\nparastichies parastichy\nparasyntheta parasyntheton\nparentheses parenthesis\nparerga parergon\nparhelia parhelion\npari-mutuels pari-mutuel\nparietes paries\nparis-mutuels pari-mutuel\nparities parity\nparodies parody\nparries parry\nparrotfishes parrotfish\nparrs parr\npartialities partiality\nparticularities particularity\nparties party\npartridgeberries partridgeberry\npartridges partridge\nparulides parulis\npashtos pashto\npaso_dobles paso_doble\npasos_dobles paso_doble\npassepieds passepied\npassers-by passer-by\npassuses passus\npasties pasty\npastorales pastorale\npastorali pastorale\npastries pastry\npatagia patagium\npatellae patella\npathologies pathology\npaths path\npatinae patina\npatios patio\npatresfamilias paterfamilias\npatriarchies patriarchy\npatrimonies patrimony\npatrolmen patrolman\npatsies patsy\npatties patty\npawnees pawnee\npeacocks peacock\npeafowls peafowl\npearlies pearly\npease pea\npeaveys peavey\npeavies peavy\npeccadilloes peccadillo\npeccadillos peccadillo\npeccaries peccary\npeccavis peccavi\npectens pecten\npectines pecten\npeculiarities peculiarity\npedaloes pedalo\npedalos pedalo\npedantries pedantry\npedes pes\npekingese pekinese\npellitories pellitory\npeloruses pelorus\npeltries peltry\npelves pelvis\npelvises pelvis\npenalties penalty\npence penny\npenes penis\npenicillia penicillium\npenicilliums penicillium\npenises penis\npenitentiaries penitentiary\npenknives penknife\npenmen penman\npennae penna\npennia penni\npennies penny\npennis penni\npenny-dreadfuls penny-dreadful\npensionaries pensionary\npentahedra pentahedron\npentahedrons pentahedron\npentarchies pentarchy\npentimenti pentimento\npenumbrae penumbra\npenumbras penumbra\npeonies peony\npeoples people\npepla peplum\npeploses peplos\npeplums peplum\npepluses peplus\npepos pepo\npequots pequot\nperches perch\nperfectos perfecto\nperfidies perfidy\nperfumeries perfumery\npericardia pericardium\nperichondria perichondrium\npericrania pericranium\nperidia peridium\nperihelia perihelion\nperinea perineum\nperinephria perinephrium\nperionychiia perionychium\nperiostea periosteum\nperipheries periphery\nperiphrases periphrasis\nperis peri\nperistalses peristalsis\nperithecia perithecium\nperitonea peritoneum\nperitoneums peritoneum\nperjuries perjury\npermanencies permanency\npermittivities permittivity\nperpetuities perpetuity\nperplexities perplexity\nperries perry\npersonae persona\npersonalities personality\npersonalties personalty\npersons person\nperversities perversity\npesos peso\npessaries pessary\npetermen peterman\npetrologies petrology\npfennige pfennig\npfennigs pfennig\nphalanges phalange phalanx\nphalansteries phalanstery\nphalanxes phalanx\nphalli phallus\nphalluses phallus\nphantasies phantasy\npharmacies pharmacy\npharynges pharynx\npharyngotomies pharyngotomy\npharynxes pharynx\nphenocopies phenocopy\nphenomena phenomenon\nphenomenons phenomenon\nphi-phenomena phi-phenomenon\nphilanthropies philanthropy\nphilodendra philodendron\nphilodendrons philodendron\nphilosophies philosophy\nphis phi\nphlebotomies phlebotomy\nphloxes phlox\nphlyctenae phlyctaena phlyctena\nphoneys phoney\nphonies phony\nphonologies phonology\nphotocopies photocopy\nphotos photo\nphraseologies phraseology\nphratries phratry\nphrensies phrensy\nphyla phylum\nphylacteries phylactery\nphylae phyle\nphyllotaxes phyllotaxis\nphyllotaxies phyllotaxy\nphyllotaxtaxes phyllotaxis\nphylloxerae phylloxera\nphylloxeras phylloxera\nphylogeneses phylogenesis\nphylogenies phylogeny\npianos piano\npiccolos piccolo\npichiciegos pichiciego\npickaninnies pickaninny\npickerels pickerel\npieds-a-terre pied-a-terre\npiemen pieman\npies pie\npieties piety\npigfishes pigfish\npiggeries piggery\npiggies piggy\npigmies pigmy\npigsties pigpen pigsty\npikemen pikeman\npikeperches pikeperch\npikes pike\npilea pileum\npilei pileus\npilis pili\npillories pillory\npimentos pimento\npimientos pimiento\npinchpennies pinchpenny\npineries pinery\npineta pinetum\npinfishes pinfish\npingos pingo\npinkies pinkie pinky\npinkoes pinko\npinkos pinko\npinnae pinna\npinnas pinna\npinnies pinny\npinnulae pinnula\npinnules pinnule\npintails pintail\npintos pinto\npipefishes pipefish\npiracies piracy\npirogi pirog\npis pi\npiscaries piscary\npiscinae piscina\npiscinas piscina\npistachios pistachio\npitchmen pitchman\npithecanthropi pithecanthropus\npithoi pithos\npities pity\npitmen pitman\npituitaries pituitary\npixies pixie pixy\nplaceboes placebo\nplacebos placebo\nplacemen placeman\nplacentae placenta\nplacentas placenta\nplaices plaice\nplain-clothesmen plain-clothesman\nplainsmen plainsman\nplanetaries planetary\nplanetariia planetarium\nplanetariums planetarium\nplanulae planula\nplasmodesdesmata plasmodesma\nplasmodesmata plasmodesma\nplasmodesms plasmodesm\nplasmodia plasmodium\nplateaus plateau\nplateaux plateau\nplaties platy\nplatypuses platypus\nplatys platy\npleasantries pleasantry\nplectra plectron plectrum\nplectrons plectron\nplectrums plectrum\nplena plenum\nplenipotentiaries plenipotentiary\nplenties plenty\nplenums plenum\npleura pleuron\npleurae pleura\npleurotomies pleurotomy\nplexuses plexus\nplicae plica\nplies ply\nplonkos plonko\nploughmen ploughman plowman\nplug-uglies plug-ugly\nplumbagos plumbago\nplumberies plumbery\npluralities plurality\nplutocracies plutocracy\npneumectomies pneumectomy\npneumobacilli pneumobacillus\npneumococci pneumococcus\npneumonectomies pneumectomy pneumonectomy\npochards pochard\npocketfuls pocketful\npocketknives pocketknife\npodia podium\npodiums podium\npoesies poesy\npogeys pogey\npogies pogy\npointsmen pointsman\npokeberries pokeberry\npokeys pokey\npokies poky\npolarities polarity\npolecats polecat\npoleis polis\npolicemen policeman\npolicewomen policewoman\npolicies policy\npoliticos politico\npolities polity\npolkas polka\npollacks pollack\npollices pollex\npolliniia pollinium\npollocks pollock\npolonies polony\npolyanthuses polyanthus\npolychasia polychasium\npolyhedra polyhedron\npolyhedrons polyhedron\npolyparies polypary\npolyparparia polyparium\npolyphonies polyphony\npolypi polypus\npolypodies polypody\npolys poly\npolyzoariia polyzoarium\npomelos pomelo\npommies pommy\npompanos pompano\npomposities pomposity\nponchos poncho\npondos pondo\nponies pony\npontes pons\npontifices pontifex\npoppies poppy\nporgies porgy\nporosities porosity\nporphyries porphyry\nporpoises porpoise\nportamenti portamento\nportfolios portfolio\nporticoes portico\nporticos portico\nportmanteaus portmanteau\nportmanteaux portmanteau\npos po\nposadas posada\nposies posy\npossemen posseman\npossibilities possibility\npostliminies postliminy\npostliminiia postliminium\npostmen postman\npostwomen postmen postwoman\npotatoes potato\npotbelllies potbelly\npotboys potboy\npotences potence\npotencies potency\npotentialities potentiality\npothecarcaries pothecary\npotiches potiche\npotmen potman\npotpourris potpourri\npotteries pottery\npotties potty\npottos potto\npoulterers poulterer\npoultrymen poultryman\npouts pout\npraenomens praenomen\npraenomina praenomen\npraxes praxis\npraxises praxis\nprebendaries prebendary\npreceptories preceptory\npreciosities preciosity\npredelle predella\npregnancies pregnancy\nprehistories prehistory\nprelacies prelacy\npreliminaries preliminary\npremaxillae premaxilla\nprenonomens prenomen\nprenonomina prenomen\npresbyteries presbytery\nprese presa\npresidencies presidency\npresidios presidio\npressmen pressman\nprestissimos prestissimo\nprestos presto\npretties pretty\npries pry\nprimacies primacy\nprimaries primary\nprimi primo\nprimigravidae primigravida\nprimigravidas primigravida\nprimiparae primipara\nprimiparas primipara\nprimordia primordium\nprimos primo\nprincipalities principality\nprincipiia principium\nprinteries printery\npriories priory\npriorities priority\nprivacies privacy\nprivies privy\nprivities privity\nprobabilities probability\nproboscides proboscis\nproboscises proboscis\nproces-verbaux proces-verbal\nproclivities proclivity\nprodigies prodigy\nprofanities profanity\nprogenies progeny\nproglotglottides proglottid proglottis\nprognoses prognosis\nprolegomena prolegomenon\nprolepses prolepsis\nproletarians proletarian\nproletaries proletary\npromiscuities promiscuity\npromontories promontory\npromycelilia promycelium\npronephra pronephros\npronephroi pronephros\npronuclei pronucleus\npronunciamentos pronunciamento\npropensities propensity\nproperties property\nprophecies prophecy\npropmen propman\npropositi propositus\nproprietartaries proprietary\nproprieties propriety\nproptoses proptosis\npropyla propylon\npropylaea propylaeum\npropylons propylon\npros pro\nproscenia proscenium\nprosceniums proscenium\nprosencephala prosencephalon\nprospectuses prospectus\nprosperities prosperity\nprostatectomies prostatectomy\nprostheses prosthesis\nprostomia prostomium\nprotases protasis\nprotectories protectory\nprothalamimia prothalamion prothalamium\nprothalli prothallus\nprothallia prothallium\nprothonotaries prothonotary protonotary\nprothoraces prothorax\nprothoraxes prothorax\nprotonemata protonema\nprotozoa protozoan\nprotozoans protozoan\nproventricutriculi proventriculus\nprovisoes proviso\nprovisos proviso\nprovos provo\nproxies proxy\nprytanea prytaneum\npsalmodies psalmody\npsalteria psalterium\npsalteries psaltery\npseudomutualities pseudomutuality\npseudopodia pseudopodium\npsychohistories psychohistory\npsychologies psychology\npsychoneuroses psychoneurosis\npsychos psycho\npsychoses psychosis\nptarmigans ptarmigan\npterygia pterygium\npterylae pteryla\nptochocracies ptochocracy\nptoses ptosis\npubes pubis\npudenda pudendum\npueblos pueblo\npufferies puffery\npuli pul\npullmans pullman\npuls pul\npulvilli pulvillus\npulvini pulvinus\npunchinelloes punchinello\npunchinellos punchinello\npunctilios punctilio\npunties punty\npupae pupa\npupariia puparium\npupas pupa\npuppies puppy\npussies pussy\npussyfoots pussyfoot\nputamina putamen\nputtees puttee\nputti putto\nputties putty\npycnidiia pycnidium\npygidiia pygidium\npygmies pigmy pygmy\npylorectomies pylorectomy\npylori pylorus\npyrographies pyrography\npyxides pyxis\npyxidiia pyxidium\nqaddishim qaddish\nqadis qadi\nquackeries quackery\nquadrennia quadrennium\nquadrenniums quadrennium\nquadricepses quadriceps\nquadrigae quadriga\nquadrigas quadriga\nquaggas quagga\nquails quail\nqualia quale\nqualities quality\nquandaries quandary\nquangos quango\nquanta quantum\nquantities quantity\nquarries quarry\nquarrymen quarryman\nquarterlies quarterly\nquarterstaves quarterstaff\nquartos quarto\nquatercentenaries quatercentenary\nquaternaries quaternary\nquebrachos quebracho\nqueries query\nquetzals quetzal\nquezales quezal\nquichuas quichua\nquiddities quiddity\nquietuses quietus\nquinaries quinary\nquincentenaries quincentenary\nquinquecentenaries quinquecentenary\nquinquennia quinquennium\nquintillions quintillion\nquists quist\nquizzes quiz\nrabatos rabato rebato\nrabbis rabbi\nrabbitfishes rabbitfish\nrabbitries rabbitry\nrabbits rabbit\nraccoons raccoon\nrachides rhachis\nrachises rachis\nracoons racoon\nradiances radiance\nradiancies radiancy\nradices radix\nradii radius\nradios radio\nradiuses radius\nradixes radix\nradulae radula\nrailleries raillery\nrailwaymen railwayman\nrallies rally\nramenta ramentum\nrami ramus\nrancheros ranchero\nranchos rancho\nrandies randy\nranunculi ranunculus\nranunculuses ranunculus\nraphae raphe\nraphides raphide raphis\nrarities rarity\nrascalities rascality\nraspaies raspatory\nraspberries raspberry\nratfishes ratfish\nrationalities rationality\nratios ratio\nrazees razee\nrazzias razzia\nre-entries re-entry\nreactionaries reactionary\nreales real\nrealities reality\nreals real\nrearmice rearmouse\nrebatos rebato\nrebozos rebozo\nrebuses rebus\nrecoveries recovery\nrecta rectum\nrecti rectus\nrectories rectory\nrectos recto\nrectrices rectrix\nrectums rectum\nredfishes redfish\nrediae redia\nredundancies redundancy\nreeboks reebok\nreedbucks reedbuck\nrefectories refectory\nreferenda referendum\nreferendums referendum\nrefineries refinery\nreformatories reformatory\nrefractories refractory\nrefugia refugium\nregalities regality\nregencies regency\nregistries registry\nreguli regulus\nreguluses regulus\nreichsmarks reichsmark\nreindeers reindeer\nreis real\nrelata relatum\nreliquaries reliquary\nreluctivities reluctivity\nremaindermen remainderman\nremedies remedy\nremiges remex\nrenegados renegado\nrepairmen repairman\nrepertories repertory\nreplevies replevy\nreplies reply\nrepositories repository\nreproducibilities reproducibility\nrepros repro\nreremice rearmouse reremouse\nreseaus reseau\nreseaux reseau\nresidencies residency\nresidentiaries residentiary\nresiduua residuum\nresponsa responsum\nresponsibilities responsibility\nresponsories responsory\nretia rete\nretiararii retiarius\nreticula reticulum\nretinacula retinaculum\nretinae retina\nretinas retina\nretros retro\nrevelries revelry\nreverberatories reverberatory\nreveries reverie revery\nreversos reverso\nrevolutionaries revolutionary\nrhabdomyomas rhabdomyoma\nrhabdomyomata rhabdomyoma\nrhachides rhachis\nrhachises rachis rhachis\nrhapsodies rhapsody\nrhatanies rhatany\nrheboks rhebok\nrhinencephala rhinencephalon\nrhinencephalons rhinencephalon\nrhinoceroses rhinoceros\nrhinos rhino\nrhizobia rhizobium\nrhizotomies rhizotomy\nrhombi rhombus\nrhombuses rhombus\nrhonchi rhonchus\nrhos rho\nrhumbas rhumba\nrhyta rhyton\nrialtos rialto\nribbonfishes ribbonfish\nricercacari ricercare\nricercari ricercare\nricercars ricercar\nrickettsiae rickettsia\nrickettsias rickettsia\nrictuses rictus\nridottos ridotto\nriflemen rifleman\nrilievi rilievo\nringhalses ringhals\nrisibilities risibility\nrivalries rivalry\nroaches roach\nrobalos robalo\nrobberies robbery\nrobes-de-chambre robe-de-chambre\nrockeries rockery\nrockfishes rockfish\nrocklings rockling\nrodeos rodeo\nroebucks roebuck\nroes roe\nrogueries roguery\nroma rom\nromanies romany rommany\nromans-fleuves roman-fleuve\nromeos romeo\nrondeaux rondeau\nrondos rondo\nroneos roneo\nroofs roof\nrookeries rookery\nroomfuls roomful\nrosaries rosary\nrosarsaria rosarium\nrosarsariums rosarium\nrosefishes rosefish\nrosemaries rosemary\nroseries rosery\nrostella rostellum\nrostra rostrum\nrostrums rostrum\nrotaries rotary\nrotls rotl\nrouleaus rouleau\nrouleaux rouleau\nroundsmen roundsman\nrowdies rowdy\nroyalties royalty\nrubatos rubato\nrubbies rubby\nrubies ruby\nruckuses ruckus\nrugae ruga\nrumens rumen\nrumina rumen\nrummies rummy\nrumpuses rumpus\nrunners-up runner-up\nrupiahs rupiah\nrusses russ\nrusskies russky\nrusskis russki\nsables sable\nsacra sacrum\nsacrarcraria sacrarium\nsacristies sacristy\nsaddleries saddlery\nsafaris safari\nsafeties safety\nsaguaros saguaro sahuaro\nsahaptans sahaptan\nsahaptians sahaptian\nsahaptins sahaptin\nsailfishes sailfish\nsalaries salary\nsalesmen salesman\nsalespeople salesperson\nsallies sally\nsalmis salmi\nsalmonberries salmonberry\nsalmonellae salmonella\nsalmons salmon\nsalpae salpa\nsalpas salpa\nsalpingectomies salpingectomy\nsalpinges salpinx\nsalsifies salsify\nsaltarelli saltarello\nsaltarellos saltarello\nsaltuses saltus\nsalvoes salvo\nsalvos salvo\nsambars sambar\nsambas samba\nsambos sambo\nsamburs sambur\nsammies sammy\nsamoyeds samoyed\nsanatoriums sanatorium\nsanbenitos sanbenito\nsancta sanctum\nsanctities sanctity\nsanctuaries sanctuary\nsanctums sanctum\nsandflies sandfly\nsandhis sandhi\nsandmen sandman\nsanitaria sanitarium\nsanitariums sanitarium\nsaphenae saphena\nsarcophagi sarcophagus\nsarcophaguses sarcophagus\nsardines sardine\nsargassos sargasso\nsaris sari\nsartorii sartorius\nsassabies sassaby\nsassasanidae sassanid\nsassasanids sassanid\nsatrapies satrapy\nsaturnalias saturnalia\nsauries saury\nsavageries savagery\nsavories savory\nsavouries savory savoury\nsawboneses sawbones\nsawfishes sawfish\nsawflies sawfly\nscads scad\nscalades scalade\nscalalados scalado\nscaldfishes scaldfish\nscaleni scalenus\nscammonies scammony\nscapulae scapula\nscapulas scapula\nscarabaei scarabaeus\nscarabaeuses scarabaeus\nscarcities scarcity\nscarfs scarf\nscarves scarf\nscenarios scenario\nsceneries scenery\nschatchens schatchen\nschatchonim schatchen shadchan\nschemata schema\nscherzandi scherzando\nscherzandos scherzando\nscherzi scherzo\nscherzos scherzo\nschizos schizo\nschmoes schmo\nscholia scholium\nschoolmen schoolman\nschuln schul\nschutzstaffeln schutzstaffel\nsciamachies sciamachy\nsciomachies sciomachy\nscirrhi scirrhus\nscirrhuses scirrhus\nscleromata scleroma\nscleroses sclerosis\nsclerotia sclerotium\nsclerotomies sclerotomy\nscoleces scolex\nscolices scolex\nscopulae scopula\nscopulas scopula\nscoriae scoria\nscotchmen scotchman\nscoters scoter\nscotomas scotoma\nscotomata scotoma\nscotsmen scotsman\nscotties scottie scotty\nscriptoria scriptorium\nscriptoriums scriptorium\nscrota scrotum\nscrotums scrotum\nscrutinies scrutiny\nscudi scudo\nsculleries scullery\nsculpins sculpin\nscurries scurry\nscuta scutum\nscutella scutellum\nscyphi scyphus\nscyphistomae scyphistoma\nscyphistomas scyphistoma\nseamen seaman\nseccos secco\nsecondaries secondary\nsecondi secondo\nsecrecies secrecy\nsecretaries secretary\nsecretaries-general secretary-general\nsectaries sectary\nsecularities secularity\nsecurities security\nsegni segno\nseigneuries seigneury\nseigniories seigniory\nselectmen selectman\nseleucidae seleucid\nseleucids seleucid\nselves self\nseminaries seminary\nseminoles seminole\nsemipros semipro\nsenecas seneca\nseniorities seniority\nsenoras senora\nsenores senor\nsenoritas senorita\nsenors senor\nsensibilities sensibility\nsensilla sensillum\nsensitivities sensitivity\nsensualities sensuality\nsentimentalities sentimentality\nsentries sentry\nsenussis senusi senussi\nseparatrices separatrix\nsephardim sephardi\nsepta septum\nseptariia septarium\nseptenaries septenary\nseptennia septennium\nseptenniums septennium\nseptillions septillion\nsequelae sequela\nsequestra sequestrum\nsera serum\nseraglios seraglio\nserails serail\nseraphim seraph\nseraphs seraph\nserenities serenity\nserums serum\nservals serval\nserviceberries serviceberry\nservicemen serviceman\nservos servo\nsestertia sestertium\nsetae seta\nseventies seventy\nseveralties severalty\nsexcentenaries sexcentenary\nsextillions sextillion\nsextodecimos sextodecimo\nsextos sexto\nsgraffiti sgraffito\nshabbasim shabbas\nshabbatim shabbat\nshackoes shacko\nshackos shacko\nshadberries shadberry\nshadchanim shadchan\nshadchans schatchen shadchan\nshads shad\nshakoes shako\nshakos shako\nshammies shammy\nshammosim shammas shammes\nshamuses shamus\nshandies shandy\nshandygaffs shandygaff\nshannies shanny\nshans shan\nshanteys shantey\nshanties shanty\nshawnees shawnee\nsheatfishes sheatfish\nsheaths sheath\nsheaves sheaf\nsheenies sheeny\nsheepsheads sheepshead\nshellfishes shellfish\nshelties sheltie shelty\nshelves shelf\nsherpas sherpa\nsherries sherry\nshies shy\nshikarees shikaree\nshikaris shikari\nshillyshallies shillyshally\nshimmies shimmy\nshindies shindy\nshindigs shindig\nshinleaves shinleaf\nshinties shinny shinty\nshipmasters shipmaster\nshipmen shipman\nshittahs shittah\nshittim shittah\nshluhs shluh\nshmoes shmo\nshofars shofar\nshofroth shofar shophar\nshojis shoji\nshonas shona\nshophars shophar\nshophroth shophar\nshorties shortie shorty\nshoshones shoshone\nshoshonis shoshoni\nshowmen showman\nshrewmice shrewmouse\nshrievalties shrievalty\nshrubberies shrubbery\nshufties shufty\nshuggies shuggy\nshuln shul\nsiddurim siddur\nsiddurs siddur\nsidemen sideman\nsidesmen sidesman\nsigloi siglos\nsignalmen signalman\nsignatories signatory\nsignoras signora\nsignore signora\nsignori signior signore\nsignories signory\nsignorinas signorina\nsignorine signorina\nsignors signor\nsiliquae siliqua\nsiliquas siliqua\nsiliques silique\nsilos silo\nsilvae silva\nsilverfishes silverfish\nsimilarities similarity\nsimplicities simplicity\nsimulacra simulacrum\nsincipita sinciput\nsinciputs sinciput\nsindhis sindhi\nsinfonie sinfonia\nsingularities singularity\nsinhaleses sinhalese\nsinuationtions sinuation\nsinuosities sinuosity\nsinuses sinus\nsiroccos sirocco\nsissies sissy\nsisters-in-law sister-in-law\nsistra sistrum\nsitulae situla\nsixmos sixmo\nsixteenmos sixteenmo\nsixties sixty\nsixty-fourmos sixty-fourmo\nskates skate\nskellies skelly\nskerries skerry\nskiamachies skiamachy\nskies sky\nskinfuls skinful\nskipjacks skipjack\nskis ski\nskivvies skivvy\nskollies skollie skolly\nskunks skunk\nslaughtermen slaughterman\nslavocracies slavocracy\nslurries slurry\nsmalti smalto\nsmaltos smalto\nsmart_alecks smart_aleck\nsmarties smarty\nsmelts smelt\nsmitheries smithery\nsmithies smithy\nsmoothies smoothie smoothy\nsnaggleteeth snaggletooth\nsnailfishes snailfish\nsnappers snapper\nsnipefishes snipefish\nsnipes snipe\nsnooks snook\nsnotties snotty\nsnowberries snowberry\nsnowmen snowman\nsnuggeries snuggery\nso-and-sos so-and-so\nsoapberries soapberry\nsocialities sociality\nsocieties society\nsocmen socman sokeman\nsodalities sodality\nsoddies soddy\nsofties softie softy\nsokemen sokeman\nsola solum\nsolaria solarium\nsolariums solarium\nsolatia solatium\nsoldi soldo\nsoldieries soldiery\nsolemnities solemnity\nsoles sol sole\nsolfeges solfege\nsolfegfeggi solfeggio\nsolfegfeggios solfeggio\nsolfeggi solfeggio\nsolfeggios solfeggio\nsoli solo\nsolidagos solidago\nsolidarities solidarity\nsolidi solidus\nsoliloquies soliloquy\nsolitaries solitary\nsolos solo\nsols sol\nsolubilities solubility\nsolums solum\nsomalis somali\nsomas soma\nsomata soma\nsombreros sombrero\nsomebodies somebody\nsomniloquies somniloquy\nsondages sondage\nsonghais songhai\nsonnies sonny\nsons-in-law son-in-law\nsophies sophi sophy\nsophistries sophistry\nsoprani soprano\nsopraninos sopranino\nsopranos soprano\nsorceries sorcery\nsordini sordino\nsorghos sorgho\nsorgos sorgo\nsori sorus\nsororities sorority\nsoroses sorosis\nsothos sotho\nsoutheasterlies southeasterly\nsoutherlies southerly\nsouthwesterlies southwesterly\nsovereignties sovereignty\nsovkhozy sovkhoz\nspacemen spaceman\nspacewomen spacewoman\nspadefishes spadefish\nspadices spadix\nspahees spahee\nspahis spahi\nsparlings sparling\nspeakeasies speakeasy\nspearfishes spearfish\nspearmen spearman\nspecialities speciality specialty\nspecialties specialty\nspeciosities speciosity\nspectra spectrum\nspecula speculum\nspeculums speculum\nspeedos speedo\nspermaries spermary\nspermatia spermatium\nspermatogonia spermatogonium\nspermatozoa spermatozoon\nspermogonia spermogonium\nsphinges sphinx\nsphinxes sphinx\nspicae spica\nspicas spica\nspiceberries spiceberry\nspiceries spicery\nspicula spiculum\nspidermen spiderman\nspies spy\nspirilla spirillum\nspiritualities spirituality\nspiritualties spiritualty\nsplayfeet splayfoot\nsplenectomies splenectomy\nsplenii splenius\nspoilsmen spoilsman\nspokesmen spokesman\nspontaneities spontaneity\nspoonfuls spoonful\nspoonies spooney spoony\nsporangia sporangium\nsporogonia sporogonium\nsports_arenas sports_arena\nsportsmen sportsman\nsportswomen sportswoman\nspringboks springbok\nspringbucks springbuck\nspringhase springhaas\nspuggies spuggy\nspugs spug\nspumoni spumone\nspurries spurrey spurry\nsputa sputum\nsquabs squab\nsquaccos squacco\nsquamae squama\nsquashes squash\nsqueteagues squeteague\nsquids squid\nsquillae squilla\nsquillas squilla\nsquirearchies squirarchy squirearchy\nsquirrelfishes squirrelfish\nsquirrels squirrel\nsquizzes squiz\nstabilities stability\nstableboys stableboy\nstablemen stableman\nstadia stadium\nstadiums stadium\nstaffmen staffman\nstaffs staff\nstamens stamen\nstamina stamen\nstaminodes staminode\nstaminonodia staminodium\nstannaries stannary\nstapedes stapes\nstaphylococci staphylococcus\nstarfishes starfish\nstartsy starets\nstatesmen statesman\nstatuaries statuary\nstatuses status\nsteadies steady\nsteelheads steelhead\nsteenboks steenbok\nsteersmen steersman\nsteinboks steinbok\nstelae stele\nsteles stele\nstenos steno\nstenoses stenosis\nstepchildren stepchild\nstereos stereo\nsterna sternum\nsternums sternum\nsternutatories sternutatory\nstickfuls stickful\nsties sty\nstigmas stigma\nstigmata stigma\nstilettos stiletto\nstimuli stimulus\nstingies stingy\nstipendiaries stipendiary\nstipites stipes\nstirpes stirps\nstoae stoa\nstoas stoa\nstockfishes stockfish\nstockmen stockman\nstogies stogey stogy\nstomata stoma\nstomodaea stomodaeum\nstomodea stomodeum\nstonefishes stonefish\nstoneflies stonefly\nstoreys storey\nstories story\nstotinki stotinka\nstotkini stotinka\nstrabotomies strabotomy\nstrappadoes strappado\nstrata stratum\nstrategies strategy\nstrati stratus\nstratocracies stratocracy\nstratocumuli stratocumulus\nstratums stratum\nstrawberries strawberry\nstreptococci streptococcus\nstretti stretto\nstrettos stretto\nstriae stria\nstrobiles strobile\nstrobili strobilus\nstrobiluses strobilus\nstromata stroma\nstrongmen strongman\nstrumae struma\nstuccoes stucco\nstuccos stucco\nstudies study\nstudios studio\nstupidities stupidity\nstyes stye\nstyli stylus\nstylopes stylops\nstylopodia stylopodium\nstyluses stylus\nstymies stymie stymy\nsubassemblies subassembly\nsubcortices subcortex\nsubdelirliria subdelirium\nsubdelirliriums subdelirium\nsubfamilies subfamily\nsubgenera subgenus\nsubgenuses subgenus\nsubindexes subindex\nsubindices subindex\nsubmucosae submucosa\nsubordinaries subordinary\nsubphyla subphylum\nsubsidiaries subsidiary\nsubsidies subsidy\nsubstrasta substratum\nsubtleties subtlety\nsubtreasuries subtreasury\nsuccedanea succedaneum\nsuccories succory\nsuccubi succubus\nsuckerfishes suckerfish\nsuckfishes suckfish\nsudardaria sudarium\nsudatoria sudatorium\nsudatories sudatory\nsudatotoria sudatorium\nsufficiencies sufficiency\nsufis sufi\nsulci sulcus\nsulkies sulky\nsullies sully\nsummae summa\nsummaries summary\nsummonses summons\nsundries sundry\nsunfishes sunfish\nsupercargoes supercargo\nsuperegos superego\nsuperfamilies superfamily\nsuperheroes superhero\nsuperintendencies superintendency\nsupermen superman\nsupernovae supernova\nsupernovas supernova\nsupernumeraries supernumerary\nsuperstrata superstratum\nsuperstratums superstratum\nsupplementaries supplementary\nsupplies supply\nsuppositories suppository\nsupremos supremo\nsureties surety\nsurgeoncies surgeoncy\nsurgeonfishes surgeonfish\nsurgeries surgery\nsurpluses surplus\nsusceptibilities susceptibility\nsuspensories suspensory\nsussos susso\nsusus susu\nsuzerainties suzerainty\nswagmen swagman\nswahilis swahili\nswamies swami\nswamis swami\nswanneries swannery\nswathes swathe\nswaths swath\nswazis swazi\nsweetiewives sweetiewife\nsweetmen sweetman\nswellfishes swellfish\nswitchmen switchman\nswordfishes swordfish\nswordsmen swordsman\nsyconia syconium\nsyllabaries syllabary\nsyllabi syllabus\nsyllabuses syllabus\nsyllepses syllepsis\nsylvas sylva\nsymmetries symmetry\nsympathectomies sympathectomy\nsympathies sympathy\nsymphonies symphony\nsymphyses symphysis\nsympodia sympodium\nsymposia symposium\nsymposiums symposium\nsynapses synapsis\nsynarchies synarchy\nsynarthroses synarthrosis\nsynchros synchro\nsynclinoria synclinorium\nsyncytia syncytium\nsyndesmoses syndesmosis\nsynergies synergy\nsynonymies synonymy\nsynopses synopsis\nsyntagmata syntagma\nsyntagms syntagm\nsyntagtagmata syntagma\nsyntheses synthesis\nsyphilomas syphiloma\nsyphilomata syphiloma\nsyringes syrinx\nsyrinxes syrinx\nsyssarcoses syssarcosis\nsyzygies syzygy\nt-men t-man\ntabbies tabby\ntableaus tableau\ntableaux tableau\ntaboos taboo\ntabus tabu\ntacos taco\ntaeniae taenia tenia\ntaffies taffy\ntagalogs tagalog\ntailles taille\ntainos taino\ntalers taler\ntali talus\ntalismans talisman\ntallaisim tallith\ntallies tally\ntallithes tallith\ntallitoth tallith\ntally-hos tally-ho\ntallymen tallyman\ntaluses talus\ntamarindos tamarindo\ntamarinds tamarind\ntamils tamil\ntamises tamis\ntammies tammy\ntangelos tangelo\ntangleberries tangleberry\ntangos tango\ntankas tanka\ntanneries tannery\ntansies tansy\ntantivies tantivy\ntapestries tapestry\ntapeta tapetum\ntapirs tapir\ntarantulae tarantula\ntarantulas tarantula\ntaros taro\ntarpons tarpon\ntarries tarry\ntarsi tarsus\ntarsometatarsi tarsometatarsus\ntattoos tattoo\ntautologies tautology\ntaxa taxon\ntaxies taxi\ntaxis taxi\nteaberries teaberry\nteals teal\ntechnicalities technicality\ntechnocracies technocracy\ntechnologies technology\ntectrices tectrix\nteeth tooth\ntegmina tegmen\ntelae tela\ntelamones telamon\ntelamons telamon\ntelangiectases telangiectasia telangiectasis\ntelia telium\ntellies telly\ntelugus telugu\ntemnes temne\ntempi tempo\ntemporalities temporality\ntempos tempo\ntenacula tenaculum\ntenancies tenancy\ntendencies tendency\ntenderfeet tenderfoot\ntenderfoots tenderfoot\nteniae tenia\ntennos tenno\ntenorrhaphies tenorrhaphy\ntenotomies tenotomy\ntenues tenuis\nteocallis teocalli\nteraphim teraph\ntercentenaries tercentenary\ntercentennials tercentennial\nteredines teredo\nteredos teredo\nterga tergum\ntermini terminus\nterminologies terminology\nterminuses terminus\nternaries ternary\nterrarraria terrarium\nterrarrariums terrarium\nterries terry\nterritories territory\ntertiaries tertiary\nterzetti terzetto\nterzettos terzetto\ntesserae tessera\ntestae testa\ntestes testis\ntestimonies testimony\ntestudines testudo\ntete-a-tetes tete-a-tete\ntetrahedra tetrahedron\ntetrahedrons tetrahedron\ntetralogies tetralogy\ntetrapodies tetrapody\ntetras tetra\ntextuaries textuary\nthais thai\nthalamencephala thalamencephalon\nthalamencephalons thalamencephalon\nthalami thalamus\nthalli thallus\nthalluses thallus\nthearchies thearchy\ntheatres-in-the-round theatre-in-the-round\nthecae theca\ntheocracies theocracy\ntheodicies theodicy\ntheogonies theogony\ntheologies theology\ntheomachies theomachy\ntheophagies theophagy\ntheophanies theophany\ntheorbos theorbo\ntheories theory\ntherapies therapy\ntherses thyrse\nthesauri thesaurus\nthesauruses thesaurus\ntheses thesis\ntheurgies theurgy\nthickleaves thickleaf\nthieves thief\nthirties thirty\nthirty-twomos thirty-twomo\ntholoi tholos\nthoraces thorax\nthoracoplasties thoracoplasty\nthoracotomies thoracotomy\nthoraxes thorax\nthous thou\nthreadfins threadfin\nthree-sixties three-sixty\nthrenodes threnode\nthrenodies threnody\nthrombi thrombus\nthymi thymus\nthymuses thymus\nthyroidectomies thyroidectomy\nthyrsi thyrsus\ntibiae tibia\ntibias tibia\nticals tical\ntidies tidy\ntiffanies tiffany\ntilburies tilbury\ntilefishes tilefish\ntimocracies timocracy\ntintinnabula tintinnabulum\ntipis tipi\ntirewomen tirewoman\ntiros tiro\ntis ti\ntitis titi\ntitmen titman\ntitmice titmouse\ntitularies titulary\ntitulars titular\ntivs tiv\ntizzies tizzy\ntlingits tlingit\nto-dos to-do\ntoadfishes toadfish\ntoadies toady\ntobaccoes tobacco\ntobaccos tobacco\ntoddies toddy\ntodies tody\ntoffees toffee\ntoffies toffy\ntoiletries toiletry\ntollies tollie tolly\ntoltecs toltec\ntomatoes tomato\ntombolos tombolo\ntomenta tomentum\ntomfooleries tomfoolery\ntommies tommy\ntonalities tonality\ntondi tondo\ntongas tonga\ntonneaus tonneau\ntonneaux tonneau\ntonsillectomies tonsillectomy\ntonsillotomies tonsillotomy\ntootses toots\ntootsies tootsie tootsy\ntootsy-wootsies tootsy-wootsy\ntopees topee\ntophi tophus\ntopiaries topiary\ntopis topi\ntopminnows topminnow\ntopographies topography\ntopoi topos\ntoreros torero\ntori torus\ntories tory\ntornadoes tornado\ntornados tornado\ntorpedoes torpedo\ntorsi torso\ntorsks torsk\ntorsos torso\ntortuosities tortuosity\ntotalities totality\ntouracos touraco turaco\ntownsmen townsman\ntrabeculae trabecula\ntraceries tracery\ntracheae trachea\ntracheostomies tracheostomy\ntracheotomies tracheotomy\ntrackmen trackman\ntradesmen tradesman\ntraditores traditor\ntraditors traditor\ntragedies tragedy\ntragi tragus\ntragicomedies tragicomedy\ntrajectories trajectory\ntransparencies transparency\ntrapezia trapezium\ntrapeziums trapezium\ntrapeziuses trapezius\ntrapezohedra trapezohedron\ntrapezohedrons trapezohedron\ntrapuntos trapunto\ntraumas trauma\ntraumata trauma\ntravesties travesty\ntreacheries treachery\ntreasuries treasury\ntreaties treaty\ntremolos tremolo\ntrenchermen trencherman\ntreponemas treponema\ntreponemata treponema\ntreponemes treponeme\ntriarchies triarchy\ntribesmen tribesman\ntributaries tributary\ntricepses triceps\ntrichinae trichina\ntrichotomies trichotomy\ntrickeries trickery\ntricliniia triclinium\ntriennia triennium\ntrienniums triennium\ntrierarchies trierarchy\ntries try\ntriforia triforium\ntriggerfishes triggerfish\ntrihedra trihedron\ntrihedrons trihedron\ntrilbies trilby\ntrilogies trilogy\ntrinities trinity\ntrios trio\ntripletails tripletail\ntriplicities triplicity\ntripodies tripody\ntriskeles triskele\ntriskelia triskelion\ntrisoctahedra trisoctahedron\ntrisoctahedrons trisoctahedron\ntriumviri triumvir\ntriumvirs triumvir\ntrivialities triviality\ntriviia trivium\ntriweeklies triweekly\ntrochleae trochlea\ntropaeola tropaeolum\ntropaeolums tropaeolum\ntrophies trophy\ntropologies tropology\ntrous-de-loup trou-de-loup\ntrousseaus trousseau\ntrousseaux trousseau\ntrouts trout\ntrumperies trumpery\ntrunkfishes trunkfish\ntrusties trusty\ntrymata tryma\ntsongas tsonga\ntswanas tswana\ntuaregs tuareg\ntubae tuba\ntubas tuba\ntuberosities tuberosity\ntubifexes tubifex\ntummies tummy\ntunas tuna\ntunguses tungus\ntunnies tunny\ntupamaros tupamaro\ntupelos tupelo\ntupis tupi\nturacos turaco\nturbaries turbary\nturbots turbot\nturcos turco\nturfmen turfman\nturfs turf\nturkeys turkey\nturkmen turkman\nturkomans turkoman\nturneries turnery\nturves turf\ntuscaroras tuscarora\ntutelaries tutelary\ntutelars tutelar\ntutsis tutsi\ntuxedos tuxedo\ntweenies tweeny\ntwelvemos twelvemo\ntwenties twenty\ntwinberries twinberry\ntwis twi\ntwo-plies two-ply\ntympana tympanum\ntympanies tympany\ntympanums tympanum\ntypos typo\ntyrannies tyranny\ntyros tiro tyro\nubermenschen ubermensch\nudos udo\nuglies ugli\nuglis ugli\nuigurs uighur\nulnae ulna\nulnas ulna\nulstermen ulsterman\nultimata ultimatum\nultimatums ultimatum\numbilici umbilicus\numbones umbo\numbos umbo\numbrae umbra\numbras umbra\numpies umpy\nuncertainties uncertainty\nunci uncus\nuncicini uncinus\nuncoes unco\nunconformities unconformity\nuncos unco\nunderbellies underbelly\nunderbodies underbody\nundersecretaries undersecretary\nunderstudies understudy\nungues unguis\nungulae ungula\nuniformities uniformity\nunities unity\nuniversalities universality\nuniversities university\nupholsteries upholstery\nuraeuses uraeus\nuranalyses uranalysis\nurbanities urbanity\nuredidia uredium\nuredines uredo\nuredinia uredinium\nuredinidinia uredinium\nuredososori uredosorus\nurethrae urethra\nurethras urethra\nurinalyses urinalysis\nurinaries urinary\nuruses urus\nusuries usury\nuteri uterus\nutes ute\nutilities utility\nutricles utricle\nutriculi utriculus\nuvulae uvula\nuvulas uvula\nuzbeks uzbek\nvacancies vacancy\nvacua vacuum\nvacuities vacuity\nvacuums vacuum\nvagaries vagary\nvagi vagus vagus\nvaginae vagina\nvaginas vagina\nvagotomies vagotomy\nvagrancies vagrancy\nvaledictories valedictory\nvalencies valence valency\nvaletudinarians valetudinarian\nvaletudinaries valetudinary\nvalleculae vallecula\nvanities vanity\nvaporetti vaporetto\nvaporettos vaporetto\nvarices varix\nvaricosities varicosity\nvaricotomies varicotomy\nvarieties variety\nvarsities varsity\nvasa vas\nvascula vasculum\nvasculums vasculum\nvasectomies vasectomy\nveddas vedda\nveeries veery\nvela velum\nvelalamina velamen\nvelarlaria velarium\nvelleities velleity\nvelocities velocity\nvenae vena\nvendaces vendace\nvendas venda\nveniremen venireman\nventriculi ventriculus\nveracities veracity\nverities verity\nvermes vermis\nverrucae verruca\nverrucas verruca\nversos verso\nvertebrae vertebra\nvertebras vertebra\nvertexes vertex\nvertices vertex\nvertigines vertigo\nvertigoes vertigo\nvesicae vesica\nvesicants vesicant\nvesicatories vesicatory\nvespiaries vespiary\nvestries vestry\nvestrymen vestryman\nvetoes veto\nvexilla vexillum\nviatica viaticum\nviaticums viaticum\nviatores viator\nvibracula vibraculum\nvibratos vibrato\nvibrios vibrio\nvibrissae vibrissa\nvice-chairman vice-chairman\nviceroyalties viceroyalty\nvicinities vicinity\nvictories victory\nvideos video\nvillainies villainy\nvillanellas villanella\nvilli villus\nvillosities villosity\nvimina vimen\nvincula vinculum\nvineries vinery\nvinos vino\nvioloncellos violoncello\nviragoes virago\nviragos virago\nvireos vireo\nvires vis\nvirtuosi virtuoso\nvirtuosos virtuoso\nviruses virus\nvisas visa\nvisayans visayan\nviscosities viscosity\nvisionaries visionary\nvitae vita\nvitalities vitality\nvitelli vitellus\nvitelluses vitellus\nvittae vitta\nvivacities vivacity\nvivariia vivarium\nvivariums vivarium\nvocabularies vocabulary\nvoces vox\nvoguls vogul\nvolcanoes volcano\nvolcanos volcano\nvolkslieder volkslied\nvolte volta\nvoluntaries voluntary\nvoluptuaries voluptuary\nvolvae volva\nvolvas volva\nvolvuluses volvulus\nvomitories vomitory\nvomituses vomitus\nvoodoos voodoo\nvortexes vortex\nvorticellae vorticella\nvortices vortex\nvotaries votary\nvotyaks votyak\nvulgarities vulgarity\nvulneraries vulnerary\nvulvae vulva\nvulvas vulva\nwaddies waddy\nwadies wadi wady\nwagons-lits wagon-lit\nwahhabis wahabi wahhabi\nwahoos wahoo\nwalkie-talkies walkie-talkie walky-talky\nwallabies wallaby\nwallaroos wallaroo\nwalleyes walleye\nwallies wally\nwalruses walrus\nwanderjahre wanderjahr\nwanderoos wanderoo\nwapitis wapiti\nward-heelers ward-heeler\nwarehousemen warehouseman\nwarranties warranty\nwashermen washman\nwasherwomen washerwoman\nwashwomen washwoman\nwatchmen watchman\nwatermen waterman\nwatusis watusi\nwaxberries waxberry\nweakfishes weakfish\nweasels weasel\nweathermen weatherman\nweeklies weekly\nweepies weepy\nweirdies weirdie\nweirdos weirdo\nwelshmen welshman\nwelshwomen welshmen welshwoman\nwerewolves werewolf\nwesterlies westerly\nwhales whale\nwharfs wharf\nwharves wharf\nwheelies wheelie\nwherries wherry\nwhimseys whimsey\nwhimsies whimsy\nwhinnies whinny\nwhippers-in whipper-in\nwhiskies whisky\nwhitefishes whitefish\nwhiteflies whitefly\nwhities whity\nwhortleberries whortleberry\nwhys why\nwicopies wicopy\nwildcats wildcat\nwildebeests wildebeest\nwineries winery\nwinnebagos winnebago\nwinos wino\nwiremen wireman\nwires wire\nwitcheries witchery\nwithies withy\nwives wife\nwobblies wobbly\nwolffishes wolffish\nwollies wolly\nwolofs wolof\nwolves wolf\nwomen woman\nwoodlice woodlouse\nwoodmen woodman\nwoodsmen woodsman\nwoollies woollie woolly\nworkmen workman\nworries worry\nworthies worthy\nwos wo\nwreaths wreath\nwreckfishes wreckfish\nwunderkinder wunderkind\nwunderkinds wunderkind\nxhosas xhosa\nxiphisterna xiphisternum\nxis xi\nyabbies yabbie yabby\nyachtsmen yachtsman\nyachtswomen yachtsmen yachtswoman\nyahoos yahoo\nyakuts yakut\nyearlies yearly\nyellow-bellies yellow-belly\nyellowtails yellowtail\nyeomen yeoman\nyeshivahs yeshiva\nyeshivoth yeshiva\nyo-yos yo-yo\nyobbos yobbo\nyobs yob\nyogin yogi\nyogis yogi\nyokes yoke\nyorubas yoruba\nyoungberries youngberry\nyourselves yourself\nyouths youth\nzamindaris zamindari zemindari\nzanies zany\nzapateados zapateado\nzapotecs zapotec\nzebras zebra\nzecchini zecchino\nzemstvos zemstvo\nzeroes zero\nzeros zero\nzhos zho\nzillions zillion\nzlotys zloty\nzoa zoon\nzoaeae zoaea zoea\nzoaeas zoaea\nzoeae zoea\nzoeas zoaea\nzombies zombie\nzombis zombi\nzoologies zoology\nzoonoses zoonosis\nzoons zoon\nzoos zoo\nzoosporangia zoosporangium\nzos zo\nzucchettos zucchetto\nzucchinis zucchini\nzulus zulu\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-1.6-Exceptions/verb.exc",
    "content": "abets abet\nabetted abet\nabetting abet\nabhorred abhor\nabhorring abhor\nabhors abhor\nabided abide\nabides abide\nabiding abide\nabode abide\nabought aby\nabout-shipped about-ship\nabout-shipping about-ship\nabout-ships about-ship\nabuts abut\nabutted abut\nabutting abut\nabye aby\nabyes aby\nabying aby\nabys aby\naccompanied accompany\naccompanies accompany\naccompanying accompany\naccrued accrue\naccrues accrue\naccruing accrue\nacetified acetify\nacetifies acetify\nacetifying acetify\nacidified acidify\nacidifies acidify\nacidifying acidify\nacquits acquit\nacquitted acquit\nacquitting acquit\nad-libbed ad-lib\nad-libbing ad-lib\nad-libs ad-lib\naddressed address\naddresses address\naddressing address\naddrest address\nadmits admit\nadmitted admit\nadmitting admit\naerified aerify\naerifies aerify\naerifying aerify\naged age\nageing age\nages age\naging age\nagreed agree\nagreeing agree\nagrees agree\nair-dried air-dry\nair-dries air-dry\nair-drying air-dry\nairdropped airdrop\nairdropping airdrop\nairdrops airdrop\nalkalified alkalify\nalkalifies alkalify\nalkalifying alkalify\nallied ally\nallies ally\nallots allot\nallotted allot\nallotting allot\nallowed_for allow_for\nallowing_for allow_for\nallows_for allow_for\nallying ally\nam be\nammonified ammonify\nammonifies ammonify\nammonifying ammonify\namnestied amnesty\namnesties amnesty\namnestying amnesty\namplified amplify\namplifies amplify\namplifying amplify\nanglicised anglicise\nanglicises anglicise\nanglicising anglicise\nanglicized anglicize\nanglicizes anglicize\nanglicizing anglicize\nanglified anglify\nanglifies anglify\nanglifying anglify\nannulled annul\nannulling annul\nannuls annul\nanted ante\nanteed ante\nanteing ante\nantes ante\nappalled appal appall\nappalling appal appall\nappalls appall\nappals appal\napplied apply\napplies apply\nappliqued applique\nappliqueing applique\nappliques applique\napplying apply\narced arc\narcing arc\narcked arc\narcking arc\narcs arc\nare be\nargued argue\nargues argue\nargufied argufy\nargufies argufy\nargufying argufy\narguing argue\narisen arise\narises arise\narising arise\narose arise\nate eat\natrophied atrophy\natrophies atrophy\natrophying atrophy\naverred aver\naverring aver\navers aver\nawaked awake\nawakes awake\nawaking awake\nawoke awake\nawoken awake\nbaaed baa\nbaaing baa\nbaas baa\nbabied baby\nbabies baby\nbaby-sat baby-sit\nbaby-sits baby-sit\nbaby-sitting baby-sit\nbabying baby\nback-pedaled back-pedal\nback-pedaling back-pedal\nback-pedalled back-pedal\nback-pedalling back-pedal\nback-pedals back-pedal\nbackbit backbite\nbackbites backbite\nbackbiting backbite\nbackbitten backbite\nbackslid backslide\nbackslidden backslide\nbackslides backslide\nbacksliding backslide\nbade bid\nbagged bag\nbagging bag\nbags bag\nballoted ballot\nballoting ballot\nballots ballot\nballyhooed ballyhoo\nballyhooing ballyhoo\nballyhoos ballyhoo\nballyragged ballyrag\nballyragging ballyrag\nballyrags ballyrag\nbandied bandy\nbandies bandy\nbandying bandy\nbanned ban\nbanning ban\nbanqueted banquet\nbanqueting banquet\nbanquets banquet\nbans ban\nbarbecued barbecue\nbarbecues barbecue\nbarbecuing barbecue\nbarred bar\nbarreled barrel\nbarreling barrel\nbarrelled barrel\nbarrelling barrel\nbarrels barrel\nbarring bar\nbars bar\nbasified basify\nbasifies basify\nbasifying basify\nbasseted basset\nbasseting basset\nbassets basset\nbastinadoed bastinado\nbastinadoes bastinado\nbastinadoing bastinado\nbats bat\nbatted bat\nbatting bat\nbayoneted bayonet\nbayoneting bayonet\nbayonets bayonet\nbayonetted bayonet\nbayonetting bayonet\nbeared bear\nbearing bear\nbears bear\nbeaten beat\nbeatified beatify\nbeatifies beatify\nbeatifying beatify\nbeating beat\nbeats beat\nbeautified beautify\nbeautifies beautify\nbeautifying beautify\nbecame become\nbecame_known become_known\nbecomes become\nbecomes_known become_known\nbecoming become\nbed bed\nbedded bed\nbedding bed\nbedeviled bedevil\nbedeviling bedevil\nbedevilled bedevil\nbedevilling bedevil\nbedevils bedevil\nbedighted bedight\nbedighting bedight\nbedights bedight\nbedimmed bedim\nbedimming bedim\nbedims bedim\nbeds bed\nbeen be\nbefallen befall\nbefalling befall\nbefalls befall\nbefell befall\nbefits befit\nbefitted befit\nbefitting befit\nbefogged befog\nbefogging befog\nbefogs befog\nbegan begin\nbegat beget\nbegets beget\nbegetting beget\nbegged beg\nbegging beg\nbeginning begin\nbegins begin\nbegirded begird\nbegirding begird\nbegirds begird\nbegirt begird\nbegot beget\nbegotten beget\nbegs beg\nbeguiled beguile\nbeguiles beguile\nbeguiling beguile\nbegun begin\nbeheld behold\nbeholden behold\nbeholding behold\nbeholds behold\nbejeweled bejewel\nbejeweling bejewel\nbejewelled bejewel\nbejewelling bejewel\nbejewels bejewel\nbelayed belay\nbelaying belay\nbelays belay\nbelied belie\nbelies belie\nbellied belly\nbellies belly\nbelly-flopped belly-flop\nbelly-flopping belly-flop\nbelly-flops belly-flop\nbellying belly\nbelying belie\nbenamed bename\nbenames bename\nbenaming bename\nbending bend\nbends bend\nbenefited benefit\nbenefiting benefit\nbenefitted benefit\nbenefitting benefit\nbenempt bename\nbent bend\nberried berry\nberries berry\nberrying berry\nbeseeched beseech\nbeseeches beseech\nbeseeching beseech\nbesets beset\nbesetting beset\nbesought beseech\nbespeaking bespeak\nbespeaks bespeak\nbespoke bespeak\nbespoken bespeak\nbespreading bespread\nbespreads bespread\nbesteaded bestead\nbesteading bestead\nbesteads bestead\nbestirred bestir\nbestirring bestir\nbestirs bestir\nbestrewed bestrew\nbestrewing bestrew\nbestrewn bestrew\nbestrews bestrew\nbestrid bestride\nbestridden bestride\nbestrides bestride\nbestriding bestride\nbestrode bestride\nbetaken betake\nbetakes betake\nbetaking betake\nbethinking bethink\nbethinks bethink\nbethought bethink\nbetook betake\nbets bet\nbetted bet\nbetting bet\nbeveled bevel\nbeveling bevel\nbevelled bevel\nbevelling bevel\nbevels bevel\nbiased bias\nbiases bias\nbiasing bias\nbiassed bias\nbiassing bias\nbidden bid\nbidding bid\nbids bid\nbinding bind\nbinds bind\nbinned bin\nbinning bin\nbins bin\nbird-dogged bird-dog\nbird-dogging bird-dog\nbird-dogs bird-dog\nbit bite\nbites bite\nbiting bite\nbits bit\nbitted bit\nbitten bite\nbitting bit\nbivouacked bivouac\nbivouacking bivouac\nbivouacs bivouac\nblabbed blab\nblabbing blab\nblabs blab\nblackberried blackberry\nblackberries blackberry\nblackberrying blackberry\nblacklegged blackleg\nblacklegging blackleg\nblacklegs blackleg\nblats blat\nblatted blat\nblatting blat\nbled bleed\nbleeding bleed\nbleeds bleed\nblessed bless\nblesses bless\nblessing bless\nblest bless\nblew blow\nblew_one's_nose blow_one's_nose\nblipped blip\nblipping blip\nblips blip\nblobbed blob\nblobbing blob\nblobs blob\nbloodied bloody\nbloodies bloody\nbloodying bloody\nblots blot\nblotted blot\nblotting blot\nblowing blow\nblowing_one's_nose blow_one's_nose\nblown blow\nblows blow\nblows_one's_nose blow_one's_nose\nblubbed blub\nblubbing blub\nblubs blub\nblue-pencilled blue-pencil\nblue-pencilling blue-pencil\nblue-pencills blue-pencil\nblued blue\nblueing blue\nblues blue\nbluing blue\nblurred blur\nblurring blur\nblurs blur\nbobbed bob\nbobbing bob\nbobs bob\nbodied body\nbodies body\nbodying body\nbogged-down bog-down\nbogged_down bog_down\nbogging-down bog-down\nbogging_down bog_down\nbogs-down bog-down\nbogs_down bog_down\nbooby-trapped booby-trap\nbooby-trapping booby-trap\nbooby-traps booby-trap\nbooed boo\nboogied boogie\nboogieing boogie\nboogies boogie\nboohooed boohoo\nboohooing boohoo\nboohoos boohoo\nbooing boo\nboos boo\nbootlegged bootleg\nbootlegging bootleg\nbootlegs bootleg\nbopped bop\nbopping bop\nbops bop\nbore bear\nborn bear\nborne bear\nbottle-fed bottle-feed\nbottle-feeding bottle-feed\nbottle-feeds bottle-feed\nbought buy\nbound bind\nbragged brag\nbragging brag\nbrags brag\nbreaking break\nbreaks break\nbreast-fed breast-feed\nbreast-feeding breast-feed\nbreast-feeds breast-feed\nbred breed\nbreeding breed\nbreeds breed\nbreid brei\nbreiing brei\nbreis brei\nbreveted brevet\nbreveting brevet\nbrevets brevet\nbrevetted brevet\nbrevetting brevet\nbrimmed brim\nbrimming brim\nbrims brim\nbringing bring\nbrings bring\nbroadcasted broadcast\nbroadcasting broadcast\nbroadcasts broadcast\nbroke break\nbroken break\nbrought bring\nbrowbeaten browbeat\nbrowbeating browbeat\nbrowbeats browbeat\nbrutified brutify\nbrutifies brutify\nbrutifying brutify\nbuckramed buckram\nbuckraming buckram\nbuckrams buckram\nbudded bud\nbudding bud\nbuds bud\nbuffeted buffet\nbuffeting buffet\nbuffets buffet\nbugged bug\nbugging bug\nbugs bug\nbuilding build\nbuilds build\nbuilt build\nbulldogging bulldog\nbullied bully\nbullies bully\nbullshits bullshit\nbullshitted bullshit\nbullshitting bullshit\nbullwhipped bullwhip\nbullwhipping bullwhip\nbullwhips bullwhip\nbullying bully\nbullyragged bullyrag\nbullyragging bullyrag\nbullyrags bullyrag\nbummed bum\nbumming bum\nbums bum\nbuncoed bunco\nbuncoing bunco\nbuncos bunco\nbunkoed bunko\nbunkoing bunko\nbunkos bunko\nburied bury\nburies bury\nburlesked burlesk\nburlesking burlesk\nburlesks burlesk\nburlesqued burlesque\nburlesques burlesque\nburlesquing burlesque\nburned burn\nburning burn\nburns burn\nburnt burn\nburred bur\nburring bur\nburs bur\nbursting burst\nbursts burst\nburying bury\nbused bus\nbuses bus\nbusheled bushel\nbusheling bushel\nbushelled bushel\nbushelling bushel\nbushels bushel\nbusied busy\nbusies busy\nbusing bus\nbussed buss\nbusses buss\nbussing buss\nbusted bust\nbusting bust\nbusts bust\nbusying busy\nbuying buy\nbuys buy\nbypassed bypass\nbypasses bypass\nbypassing bypass\nbypast bypass\ncaballed cabal\ncaballing cabal\ncabals cabal\ncaddied caddie caddy\ncaddies caddie caddy\ncaddying caddie caddy\ncalcified calcify\ncalcifies calcify\ncalcifying calcify\ncalqued calque\ncalques calque\ncalquing calque\ncame come\ncanaled canal\ncanaling canal\ncanalled canal\ncanalling canal\ncanals canal\ncanceled cancel\ncanceling cancel\ncancelled cancel\ncancelling cancel\ncancels cancel\ncandied candy\ncandies candy\ncandying candy\ncanned can\ncanning can\ncanopied canopy\ncanopies canopy\ncanopying canopy\ncans can\ncapped cap\ncapping cap\ncaps cap\ncarbonadoed carbonado\ncarbonadoing carbonado\ncarbonados carbonado\ncarbureted carburet\ncarbureting carburet\ncarburets carburet\ncarburetted carburet\ncarburetting carburet\ncarillonned carillon\ncarillonning carillon\ncarillons carillon\ncarneyed carney\ncarneying carney\ncarneys carney\ncarnied carny\ncarnies carny\ncarnified carnify\ncarnifies carnify\ncarnifying carnify\ncarnying carny\ncaroled carol\ncaroling carol\ncarolled carol\ncarolling carol\ncarols carol\ncarried carry\ncarries carry\ncarrying carry\ncasefied casefy\ncasefies casefy\ncasefying casefy\ncasting cast\ncasts cast\ncatches catch\ncatching catch\ncatnapped catnap\ncatnapping catnap\ncatnaps catnap\ncats cat\ncatted cat\ncatting cat\ncaught catch\ncaviled cavil\ncaviling cavil\ncavilled cavil\ncavilling cavil\ncavils cavil\ncertified certify\ncertifies certify\ncertifying certify\nchanneled channel\nchanneling channel\nchannelled channel\nchannelling channel\nchannels channel\nchapped chap\nchapping chap\nchaps chap\ncharred char\ncharring char\nchars char\nchassed chasse\nchasseing chasse\nchasses chasse\nchats chat\nchatted chat\nchatting chat\nchevied chivy\nchevies chivy\nchevying chivy\nchid chide\nchidden chide\nchided chide\nchides chide\nchiding chide\nchinned chin\nchinning chin\nchins chin\nchipped chip\nchipping chip\nchips chip\nchiseled chisel\nchiseling chisel\nchiselled chisel\nchiselling chisel\nchisels chisel\nchitchats chitchat\nchitchatted chitchat\nchitchatting chitchat\nchivied chivy\nchivies chivy\nchivs chiv\nchivved chiv\nchivvied chivy\nchivvies chivy\nchivving chiv\nchivvying chivy\nchivying chivy\nchondrified chondrify\nchondrifies chondrify\nchondrifying chondrify\nchooses choose\nchoosing choose\nchopped chop\nchopping chop\nchops chop\nchose choose\nchosen choose\nchugged chug\nchugging chug\nchugs chug\nchummed chum\nchumming chum\nchums chum\ncitified citify\ncitifies citify\ncitifying citify\nclad clothe\ncladding clad\nclads clad\nclammed clam\nclamming clam\nclams clam\nclapped clap\nclapping clap\nclaps clap\nclarified clarify\nclarifies clarify\nclarifying clarify\nclassified classify\nclassifies classify\nclassifying classify\ncleaved cleave\ncleaves cleave\ncleaving cleave\ncleft cleave\nclemmed clem\nclemming clem\nclems clem\ncleped clepe\nclepes clepe\ncleping clepe\nclept clepe\nclinging cling\nclings cling\nclipped clip\nclipping clip\nclips clip\nclogged clog\nclogging clog\nclogs clog\nclopped clop\nclopping clop\nclops clop\nclothed clothe\nclothes clothe\nclothing clothe\nclots clot\nclotted clot\nclotting clot\nclove cleave\ncloven cleave\nclubbed club\nclubbing club\nclubs club\nclued clue\nclues clue\ncluing clue\nclung cling\nco-opted co-opt\nco-opted coopt\nco-opting co-opt\nco-opting coopt\nco-opts co-opt\nco-opts coopts\nco-ordinate coordinate\nco-ordinated coordinate\nco-ordinates coordinate\nco-ordinating coordinate\nco-starred co-star\nco-starring co-star\nco-stars co-star\ncockneyfied cockneyfy\ncockneyfies cockneyfy\ncockneyfying cockneyfy\ncodded cod\ncodding cod\ncodified codify\ncodifies codify\ncodifying codify\ncods cod\ncogged cog\ncogging cog\ncogs cog\ncoiffed coif\ncoiffing coif\ncoifs coif\ncollied colly\ncollies colly\ncollogued collogue\ncollogues collogue\ncolloguing collogue\ncollying colly\ncombated combat\ncombating combat\ncombats combat\ncombatted combat\ncombatting combat\ncommits commit\ncommitted commit\ncommitting commit\ncompelled compel\ncompelling compel\ncompels compel\ncomplied comply\ncomplies comply\ncomplots complot\ncomplotted complot\ncomplotting complot\ncomplying comply\nconcertinaed concertina\nconcertinaing concertina\nconcertinas concertina\nconcurred concur\nconcurring concur\nconcurs concur\nconfabbed confab\nconfabbing confab\nconfabs confab\nconferred confer\nconferring confer\nconfers confer\ncongaed conga\ncongaing conga\ncongas conga\nconned con\nconning con\ncons con\nconstrued construe\nconstrues construe\nconstruing construe\ncontangoed contango\ncontangoes contango\ncontangoing contango\ncontinued continue\ncontinues continue\ncontinuing continue\ncontrolled control\ncontrolling control\ncontrols control\ncooed coo\ncooeed cooee\ncooeeing cooee\ncooees cooee\ncooeyed cooey\ncooeying cooey\ncooeys cooey\ncooing coo\ncoos coo\ncopied copy\ncopies copy\ncopped cop\ncopping cop\ncops cop\ncopying copy\ncopyreading copyread\ncopyreads copyread\ncoquets coquet\ncoquetted coquet\ncoquetting coquet\ncorralled corral\ncorralling corral\ncorrals corral\ncosting cost\ncosts cost\ncounseled counsel\ncounseling counsel\ncounselled counsel\ncounselling counsel\ncounsels counsel\ncounterplots counterplot\ncounterplotted counterplot\ncounterplotting counterplot\ncountersank countersink\ncountersinking countersink\ncountersinks countersink\ncountersunk countersink\ncourt-martialled court-martial\ncourt-martialling court-martial\ncourt-martials court-martial\ncrabbed crab\ncrabbing crab\ncrabs crab\ncrammed cram\ncramming cram\ncrams cram\ncrapped crap\ncrapping crap\ncraps crap\ncreeping creep\ncreeps creep\ncrept creep\ncrescendoed crescendo\ncrescendoes crescendo\ncrescendoing crescendo\ncribbed crib\ncribbing crib\ncribs crib\ncried cry\ncries cry\ncrocheted crochet\ncrocheting crochet\ncrochets crochet\ncropped crop\ncropping crop\ncrops crop\ncroqueted croquet\ncroqueting croquet\ncroquets croquet\ncrossbred crossbreed\ncrossbreeding crossbreed\ncrossbreeds crossbreed\ncrosscuts crosscut\ncrosscutting crosscut\ncrucified crucify\ncrucifies crucify\ncrucifying crucify\ncrying cry\ncrystallized crystallize\ncrystallizes crystallize\ncrystallizing crystallize\ncubbed cub\ncubbing cub\ncubs cub\ncuckooed cuckoo\ncuckooing cuckoo\ncuckoos cuckoo\ncudgeled cudgel\ncudgeling cudgel\ncudgelled cudgel\ncudgelling cudgel\ncudgels cudgel\ncued cue\ncues cue\ncuing cue\ncupeled cupel\ncupeling cupel\ncupelled cupel\ncupelling cupel\ncupels cupel\ncupped cup\ncupping cup\ncups cup\ncurets curet\ncuretted curet\ncurettes curet\ncuretting curet\ncurried curry\ncurries curry\ncurrying curry\ncursed curse\ncurses curse\ncursing curse\ncurst curse\ncurtseyed curtsey\ncurtseying curtsey\ncurtseys curtsey\ncurtsied curtsy\ncurtsies curtsy\ncurtsying curtsy\ncurveted curvet\ncurveting curvet\ncurvets curvet\ncurvetted curvet\ncurvetting curvet\ncutting cut\ndabbed dab\ndabbing dab\ndabs dab\ndagged dag\ndagging dag\ndags dag\ndallied dally\ndallies dally\ndallying dally\ndammed dam\ndamming dam\ndamnified damnify\ndamnifies damnify\ndamnifying damnify\ndams dam\ndandified dandify\ndandifies dandify\ndandifying dandify\ndapped dap\ndapping dap\ndaps dap\nde-emphasized de-emphasize\nde-emphasizes de-emphasize\nde-emphasizing de-emphasize\ndealt deal\ndebarred debar\ndebarring debar\ndebars debar\ndebugged debug\ndebugging debug\ndebugs debug\ndebused debus\ndebuses debus\ndebusing debus\ndebussed debus\ndebusses debus\ndebussing debus\ndecalcified decalcify\ndecalcifies decalcify\ndecalcifying decalcify\ndeclassified declassify\ndeclassifies declassify\ndeclassifying declassify\ndecontrolled decontrol\ndecontrolling decontrol\ndecontrols decontrol\ndecreed decree\ndecreeing decree\ndecrees decree\ndecried decry\ndecries decry\ndecrying decry\ndeep-freeze deepfreeze\ndeep-freezed deepfreeze\ndeep-freezes deepfreeze\ndeep-fried deep-fry\ndeep-fries deep-fry\ndeep-frying deep-fry\ndeferred defer\ndeferring defer\ndefers defer\ndefied defy\ndefies defy\ndefying defy\ndegases degas\ndegassed degas\ndegasses degas\ndegassing degas\ndehumidified dehumidify\ndehumidifies dehumidify\ndehumidifying dehumidify\ndeified deify\ndeifies deify\ndeifying deify\ndeled dele\ndeleing dele\ndeles dele\ndemits demit\ndemitted demit\ndemitting demit\ndemobbed demob\ndemobbing demob\ndemobs demob\ndemulsified demulsify\ndemulsifies demulsify\ndemulsifying demulsify\ndemurred demur\ndemurring demur\ndemurs demur\ndemystified demystify\ndemystifies demystify\ndemystifying demystify\ndenazified denazify\ndenazifies denazify\ndenazifying denazify\ndenied deny\ndenies deny\ndenitrified denitrify\ndenitrifies denitrify\ndenitrifying denitrify\ndenned den\ndenning den\ndens den\ndenying deny\ndescried descry\ndescries descry\ndescrying descry\ndeterred deter\ndeterring deter\ndeters deter\ndetoxified detoxify\ndetoxifies detoxify\ndetoxifying detoxify\ndevaluated devaluate\ndevaluates devaluate\ndevaluating devaluate\ndevalued devalue\ndevalues devalue\ndevaluing devalue\ndeviled devil\ndeviling devil\ndevilled devil\ndevilling devil\ndevils devil\ndevitrified devitrify\ndevitrifies devitrify\ndevitrifying devitrify\ndiagramed diagram\ndiagraming diagram\ndiagrammed diagram\ndiagramming diagram\ndiagrams diagram\ndialed dial\ndialing dial\ndialled dial\ndialling dial\ndials dial\ndibbed dib\ndibbing dib\ndibs dib\ndid do\ndie-casting die-cast\ndie-casts die-cast\ndied die\ndies die\ndigging dig\ndighted dight\ndighting dight\ndights dight\ndignified dignify\ndignifies dignify\ndignifying dignify\ndigs dig\ndilly-dallied dilly-dally\ndilly-dallies dilly-dally\ndilly-dallying dilly-dally\ndimmed dim\ndimming dim\ndims dim\ndinned din\ndinning din\ndins din\ndipped dip\ndipping dip\ndips dip\ndirtied dirty\ndirties dirty\ndirtying dirty\ndisagreed disagree\ndisagreeing disagree\ndisagrees disagree\ndisannulled disannul\ndisannulling disannul\ndisannuls disannul\ndisbarred disbar\ndisbarring disbar\ndisbars disbar\ndisbudded disbud\ndisbudding disbud\ndisbuds disbud\ndiscontinued discontinue\ndiscontinues discontinue\ndiscontinuing discontinue\ndisembodied disembody\ndisembodies disembody\ndisembodying disembody\ndisembogued disembogue\ndisembogues disembogue\ndisemboguing disembogue\ndisemboweled disembowel\ndisemboweling disembowel\ndisembowelled disembowel\ndisembowelling disembowel\ndisembowels disembowel\ndisenthralled disenthral disenthrall\ndisenthralling disenthral disenthrall\ndisenthralls disenthral\ndisenthrals disenthrall\ndisheveled dishevel\ndisheveling dishevel\ndishevelled dishevel\ndishevelling dishevel\ndishevels dishevel\ndisinterred disinter\ndisinterring disinter\ndisinters disinter\ndispelled dispel\ndispelling dispel\ndispels dispel\ndisqualified disqualify\ndisqualifies disqualify\ndisqualifying disqualify\ndissatisfied dissatisfy\ndissatisfies dissatisfy\ndissatisfying dissatisfy\ndistilled distil distill\ndistilling distil distill\ndistills distill\ndistils distil\ndittoed ditto\ndittoing ditto\ndittos ditto\ndived dive\ndiversified diversify\ndiversifies diversify\ndiversifying diversify\ndives dive\ndiving dive\ndivvied divvy\ndivvies divvy\ndivvying divvy\ndizzied dizzy\ndizzies dizzy\ndizzying dizzy\ndoes do\ndogged dog\ndogging dog\ndoglegged dogleg\ndoglegging dogleg\ndoglegs dogleg\ndogs dog\ndoing do\ndollied dolly\ndollies dolly\ndollying dolly\ndone do\ndonned don\ndonning don\ndons don\ndots dot\ndotted dot\ndotting dot\ndouble-tongued double-tongue\ndouble-tongues double-tongue\ndouble-tonguing double-tongue\ndought dow\ndove dive\ndowed dow\ndowing dow\ndows dow\ndrabbed drab\ndrabbing drab\ndrabs drab\ndragged drag\ndragging drag\ndrags drag\ndrank drink\ndrawing draw\ndrawn draw\ndraws draw\ndreamed dream\ndreaming dream\ndreams dream\ndreamt dream\ndreed dree\ndreeing dree\ndrees dree\ndrew draw\ndried dry\ndries dry\ndrinking drink\ndrinks drink\ndripped drip\ndripping drip\ndrips drip\ndriveled drivel\ndriveling drivel\ndrivelled drivel\ndrivelling drivel\ndrivels drivel\ndriven drive\ndrives drive\ndriving drive\ndropped drop\ndropping drop\ndrops drop\ndrove drive\ndrubbed drub\ndrubbing drub\ndrubs drub\ndrugged drug\ndrugging drug\ndrugs drug\ndrummed drum\ndrumming drum\ndrunk drink\ndrying dry\ndubbed dub\ndubbing dub\ndubs dub\ndueled duel\ndueling duel\nduelled duel\nduelling duel\nduels duel\ndug dig\ndulcified dulcify\ndulcifies dulcify\ndulcifying dulcify\ndummied dummy\ndummies dummy\ndummying dummy\ndunned dun\ndunning dun\nduns dun\ndwelled dwell\ndwelling dwell\ndwells dwell\ndwelt dwell\ndyed dye\ndyeing dye\ndyes dye\ndying die\neasied easy\neasies easy\neasying easy\neaten eat\neating eat\neats eat\neavesdropped eavesdrop\neavesdropping eavesdrop\neavesdrops eavesdrop\nechoed echo\nechoes echo\nechoing echo\neddied eddy\neddies eddy\neddying eddy\nedified edify\nedifies edify\nedifying edify\nego-tripped ego-trip\nego-tripping ego-trip\nego-trips ego-trip\nelectrified electrify\nelectrifies electrify\nelectrifying electrify\nembargoed embargo\nembargoes embargo\nembargoing embargo\nembedded embed\nembedding embed\nembeds embed\nembodied embody\nembodies embody\nembodying embody\nembrued embrue\nembrues embrue\nembruing embrue\nembused embus\nembuses embus\nembusing embus\nembussed embus\nembusses embus\nembussing embus\nemceed emcee\nemceeing emcee\nemcees emcee\nemits emit\nemitted emit\nemitting emit\nempaneled empanel\nempaneling empanel\nempanelled empanel\nempanelling empanel\nempanels empanel\nemptied empty\nempties empty\nemptying empty\nemulsified emulsify\nemulsifies emulsify\nemulsifying emulsify\nenameled enamel\nenameling enamel\nenamelled enamel\nenamelling enamel\nenamels enamel\nendued endue\nendues endue\nenduing endue\nengluts englut\nenglutted englut\nenglutting englut\nenrolled enrol enroll\nenrolling enrol enroll\nenrolls enroll\nenrols enrol\nensued ensue\nensues ensue\nensuing ensue\nenthralled enthral enthrall\nenthralling enthral enthrall\nenthralls enthrall\nenthrals enthral\nentrammelled entrammel\nentrammelling entrammel\nentrammels entrammel\nentrapped entrap\nentrapping entrap\nentraps entrap\nenvied envy\nenvies envy\nenvying envy\nenwinding enwind\nenwinds enwind\nenwound enwind\nenwrapped enwrap\nenwrapping enwrap\nenwraps enwrap\nequaled equal\nequaling equal\nequalled equal\nequalling equal\nequals equal\nequipped equip\nequipping equip\nequips equip\nespied espy\nespies espy\nespying espy\nesterified esterify\nesterifies esterify\nesterifying esterify\nestopped estop\nestopping estop\nestops estop\netherified etherify\netherifies etherify\netherifying etherify\nexcelled excel\nexcelling excel\nexcels excel\nexemplified exemplify\nexemplifies exemplify\nexemplifying exemplify\nexpelled expel\nexpelling expel\nexpels expel\nextolled extol extoll\nextolling extol extoll\nextolls extoll\nextols extol\neyed eye\neyeing eye\neyes eye\neying eye\nfaceted facet\nfaceting facet\nfacets facet\nfacetted facet\nfacetting facet\nfacsimiled facsimile\nfacsimileing facsimile\nfacsimiles facsimile\nfagged fag\nfagging fag\nfags fag\nfallen fall\nfalling fall\nfalls fall\nfalsified falsify\nfalsifies falsify\nfalsifying falsify\nfancied fancy\nfancies fancy\nfancying fancy\nfanned fan\nfanning fan\nfans fan\nfantasied fantasy\nfantasies fantasy\nfantasying fantasy\nfatigued fatigue\nfatigues fatigue\nfatiguing fatigue\nfats fat\nfatted fat\nfatting fat\nfeatherbedded featherbed\nfeatherbedding featherbed\nfeatherbeds featherbed\nfed feed\nfeed feed fee\nfeeding feed\nfeeds feed\nfeeing fee\nfeeling feel\nfeels feel\nfees fee\nfell fall\nfelt feel felt\nfelted felt\nfelting felt\nfelts felt\nferried ferry\nferries ferry\nferrying ferry\nfibbed fib\nfibbing fib\nfibs fib\nfigged fig\nfigging fig\nfighting fight\nfights fight\nfilagreed filagree\nfilagreeing filagree\nfilagrees filagree\nfiligreed filigree\nfiligreeing filigree\nfiligrees filigree\nfillagreed fillagree\nfillagreeing fillagree\nfillagrees fillagree\nfilled_up fill_up\nfinding find\nfinds find\nfine-drawing fine-draw\nfine-drawn fine-draw\nfine-draws fine-draw\nfine-drew fine-draw\nfinned fin\nfinning fin\nfins fin\nfits fit\nfitted fit\nfitting fit\nflagged flag\nflagging flag\nflags flag\nflammed flam\nflamming flam\nflams flam\nflanneled flannel\nflanneling flannel\nflannelled flannel\nflannelling flannel\nflannels flannel\nflapped flap\nflapping flap\nflaps flap\nflats flat\nflatted flat\nflatting flat\nfled flee\nfleeing flee\nflees flee\nflew fly\nflies fly\nflimflammed flimflam\nflimflamming flimflam\nflimflams flimflam\nflinging fling\nflings fling\nflip-flopped flip-flop\nflip-flopping flip-flop\nflip-flops flip-flop\nflipped flip\nflipping flip\nflips flip\nflits flit\nflitted flit\nflitting flit\nflogged flog\nflogging flog\nflogs flog\nfloodlighting floodlight\nfloodlights floodlight\nfloodlit floodlight\nflopped flop\nflopping flop\nflops flop\nflown fly\nflubbed flub\nflubbing flub\nflung fling\nflurried flurry\nflurries flurry\nflurrying flurry\nflyblew flyblow\nflyblowing flyblow\nflyblown flyblow\nflyblows flyblow\nflying fly\nfobbed fob\nfobbing fob\nfobs fob\nfocused focus\nfocuses focus\nfocusing focus\nfogged fog\nfogging fog\nfogs fog\nfolioed folio\nfolioing folio\nfolios folio\nfootslogged footslog\nfootslogging footslog\nfootslogs footslog\nforbad forbid\nforbade forbid\nforbearing forbear\nforbears forbear\nforbidden forbid\nforbidding forbid\nforbids forbid\nforbore forbear\nforborne forbear\nforce-fed force-feed\nforce-feeding force-feed\nforce-feeds force-feed\nfordid fordo\nfordoes fordo\nfordoing fordo\nfordone fordo\nforecasted forecast\nforecasting forecast\nforecasts forecast\nforedid foredo\nforedoes foredo\nforedoing foredo\nforedone foredo\nforegoes forego\nforegoing forego\nforegone forego\nforeknew foreknow\nforeknowing foreknow\nforeknown foreknow\nforeknows foreknow\nforeran forerun\nforerunning forerun\nforeruns forerun\nforesaw foresee\nforeseeing foresee\nforeseen foresee\nforesees foresee\nforeshowed foreshow\nforeshowing foreshow\nforeshown foreshow\nforeshows foreshow\nforespeaking forespeak\nforespeaks forespeak\nforespoke forespeak\nforespoken forespeak\nforetelling foretell\nforetells foretell\nforetold foretell\nforewent forego\nforgave forgive\nforgets forget\nforgetting forget\nforgiven forgive\nforgives forgive\nforgiving forgive\nforgoes forgo\nforgoing forgo\nforgone forgo\nforgot forget\nforgotten forget\nformats format\nformatted format\nformatting format\nforsaken forsake\nforsakes forsake\nforsaking forsake\nforsook forsake\nforspeaking forspeak\nforspeaks forspeak\nforspoke forspeak\nforspoken forspeak\nforswearing forswear\nforswears forswear\nforswore forswear\nforsworn forswear\nfortified fortify\nfortifies fortify\nfortifying fortify\nforwent forgo\nfought fight\nfound find\nfoxtrots foxtrot\nfoxtrotted foxtrot\nfoxtrotting foxtrot\nfrapped frap\nfrapping frap\nfraps frap\nfreed free\nfreeing free\nfrees free\nfreeze-dried freeze-dry\nfreeze-dries freeze-dry\nfreeze-drying freeze-dry\nfreezes freeze\nfreezing freeze\nfrenchified frenchify\nfrenchifies frenchify\nfrenchifying frenchify\nfrenzied frenzy\nfrenzies frenzy\nfrenzying frenzy\nfrets fret\nfretted fret\nfretting fret\nfricasseed fricassee\nfricasseeing fricassee\nfricassees fricassee\nfried fry\nfries fry\nfrigged frig\nfrigging frig\nfrigs frig\nfrits frit\nfritted frit fritt\nfritting frit fritt\nfritts fritt\nfrivoled frivol\nfrivoling frivol\nfrivolled frivol\nfrivolling frivol\nfrivols frivol\nfrogged frog\nfrogging frog\nfrogs frog\nfrolicked frolic\nfrolicking frolic\nfrolics frolic\nfroze freeze\nfrozen freeze\nfructified fructify\nfructifies fructify\nfructifying fructify\nfrying fry\nfueled fuel\nfueling fuel\nfuelled fuel\nfuelling fuel\nfuels fuel\nfulfilled fulfil fulfill\nfulfilling fulfil fulfill\nfulfills fulfill\nfulfils fulfil\nfunned fun\nfunneled funnel\nfunneling funnel\nfunnelled funnel\nfunnelling funnel\nfunnels funnel\nfunning fun\nfuns fun\nfurred fur\nfurring fur\nfurs fur\ngadded gad\ngadding gad\ngads gad\ngagged gag\ngagging gag\ngags gag\ngainsaid gainsay\ngainsaying gainsay\ngainsays gainsay\ngamboled gambol\ngamboling gambol\ngambolled gambol\ngambolling gambol\ngambols gambol\ngammed gam\ngamming gam\ngams gam\ngan gin\nganned gan\nganning gan\ngans gan\ngapped gap\ngapping gap\ngaps gap\ngarnisheed garnishee\ngarnisheeing garnishee\ngarnishees garnishee\ngases gas\ngasified gasify\ngasifies gasify\ngasifying gasify\ngassed gas\ngasses gas\ngassing gas\ngave give\ngeed gee\ngeeing gee\ngees gee\ngelded geld\ngelding geld\ngelds geld\ngelled gel\ngelling gel\ngels gel\ngelt geld\ngemmed gem\ngemming gem\ngems gem\ngenned-up gen-up\ngenning-up gen-up\ngens-up gen-up\ngets get\ngets_lost get_lost\ngets_started get_started\ngetting get\ngetting_lost get_lost\ngetting_started get_started\nghostwrites ghostwrite\nghostwriting ghostwrite\nghostwritten ghostwrite\nghostwrote ghostwrite\ngibbed gib\ngibbing gib\ngibs gib\ngiddied giddy\ngiddies giddy\ngiddying giddy\ngiftwrapped giftwrap\ngiftwrapping giftwrap\ngiftwraps giftwrap\ngigged gig\ngigging gig\ngigs gig\ngilded gild\ngilding gild\ngilds gild\ngilt gild\nginned gin\nginning gin\ngins gin\ngipped gip\ngipping gip\ngips gip\ngirded gird\ngirding gird\ngirds gird\ngirt gird\ngiven give\ngives give\ngiving give\nglaceed glace\nglaceing glace\nglaces glace\nglommed glom\nglomming glom\ngloried glory\nglories glory\nglorified glorify\nglorifies glorify\nglorifying glorify\nglorying glory\nglued glue\nglues glue\ngluing glue\ngluts glut\nglutted glut\nglutting glut\ngnawed gnaw\ngnawing gnaw\ngnawn gnaw\ngnaws gnaw\ngoes go\ngoes_deep go_deep\ngoing go\ngoing_deep go_deep\ngollied golly\ngollies golly\ngollying golly\ngone go\ngone_deep go_deep\ngoose-stepped goose-step\ngoose-stepping goose-step\ngoose-steps goose-step\ngot get\ngot_lost get_lost\ngot_started get_started\ngotten get\ngotten_lost get_lost\ngrabbed grab\ngrabbing grab\ngrabs grab\ngratified gratify\ngratifies gratify\ngratifying gratify\ngraved grave\ngraveled gravel\ngraveling gravel\ngravelled gravel\ngravelling gravel\ngravels gravel\ngraven grave\ngraves grave\ngraving grave\ngreed gree\ngreeing gree\ngrees gree\ngrew grow\ngrinding grind\ngrinds grind\ngrinned grin\ngrinning grin\ngrins grin\ngripped grip\ngripping grip\ngrips grip\ngript grip\ngrits grit\ngritted grit\ngritting grit\nground grind\ngroveled grovel\ngroveling grovel\ngrovelled grovel\ngrovelling grovel\ngrovels grovel\ngrowing grow\ngrown grow\ngrows grow\ngrubbed grub\ngrubbing grub\ngrubs grub\nguaranteed guarantee\nguaranteeing guarantee\nguarantees guarantee\nguarantied guaranty\nguaranties guaranty\nguarantying guaranty\ngullied gully\ngullies gully\ngullying gully\ngummed gum\ngumming gum\ngums gum\ngumshoed gumshoe\ngumshoeing gumshoe\ngumshoes gumshoe\ngunned gun\ngunning gun\nguns gun\ngypped gyp\ngypping gyp\ngyps gyp\nhacksawed hacksaw\nhacksawing hacksaw\nhacksawn hacksaw\nhacksaws hacksaw\nhad have\nhad_a_feeling have_a_feeling\nhad_left have_left\nhad_the_feeling have_the_feeling\nhalloaed halloa\nhalloaing halloa\nhalloas halloa\nhalloed hallo\nhalloing hallo\nhallooed halloo\nhallooing halloo\nhalloos halloo\nhallos hallo\nhaloed halo\nhaloes halo\nhaloing halo\nhalos halo\nhammed ham\nhamming ham\nhams ham\nhamstringing hamstring\nhamstrings hamstring\nhamstrung hamstring\nhand-knits hand-knit\nhand-knitted hand-knit\nhand-knitting hand-knit\nhandfed handfeed\nhandfeeding handfeed\nhandfeeds handfeed\nhandicapped handicap\nhandicapping handicap\nhandicaps handicap\nhandselled handsel\nhandselling handsel\nhandsels handsel\nhanging hang\nhangs hang\nhanseled hansel\nhanseling hansel\nhansels hansel\nharried harry\nharries harry\nharrying harry\nhas have\nhas_a_feeling have_a_feeling\nhas_left have_left\nhas_the_feeling have_the_feeling\nhatcheled hatchel\nhatcheling hatchel\nhatchelled hatchel\nhatchelling hatchel\nhatchels hatchel\nhats hat\nhatted hat\nhatting hat\nhaving have\nhaving_a_feeling have_a_feeling\nhaving_left have_left\nhaving_the_feeling have_the_feeling\nheard hear\nhearing hear\nhears hear\nheaved heave\nheaves heave\nheaving heave\nhedgehopped hedgehop\nhedgehopping hedgehop\nhedgehops hedgehop\nheld hold\nhemmed hem\nhemming hem\nhems hem\nhewed hew\nhewing hew\nhewn hew\nhews hew\nhiccuped hiccup\nhiccuping hiccup\nhiccupped hiccup\nhiccupping hiccup\nhiccups hiccup\nhid hide\nhidden hide\nhides hide\nhiding hide\nhigh-hats high-hat\nhigh-hatted high-hat\nhigh-hatting high-hat\nhinnied hinny\nhinnies hinny\nhinnying hinny\nhits hit\nhitting hit\nhobbed hob\nhobbing hob\nhobnobbed hobnob\nhobnobbing hobnob\nhobnobs hobnob\nhobs hob\nhocus-pocused hocus-pocus\nhocus-pocuses hocus-pocus\nhocus-pocusing hocus-pocus\nhocus-pocussed hocus-pocus\nhocus-pocussing hocus-pocus\nhocused hocus\nhocuses hocus\nhocusing hocus\nhocussed hocus\nhocussing hocus\nhoed hoe\nhoeing hoe\nhoes hoe\nhogged hog\nhogging hog\nhogs hog\nhogtied hogtie\nhogties hogtie\nhogtying hogtie\nholding hold\nholds hold\nhoneyed honey\nhoneying honey\nhoneys honey\nhonied honey\nhoodooed hoodoo\nhoodooing hoodoo\nhoodoos hoodoo\nhopped hop\nhopping hop\nhops hop\nhorrified horrify\nhorrifies horrify\nhorrifying horrify\nhorseshoed horseshoe\nhorseshoeing horseshoe\nhorseshoes horseshoe\nhorsewhipped horsewhip\nhorsewhipping horsewhip\nhorsewhips horsewhip\nhouseled housel\nhouseling housel\nhouselled housel\nhouselling housel\nhousels housel\nhove heave\nhoveled hovel\nhoveling hovel\nhovelled hovel\nhovelling hovel\nhovels hovel\nhugged hug\nhugging hug\nhugs hug\nhumbugged humbug\nhumbugging humbug\nhumbugs humbug\nhumidified humidify\nhumidifies humidify\nhumidifying humidify\nhummed hum\nhumming hum\nhums hum\nhung hang\nhurried hurry\nhurries hurry\nhurrying hurry\nhurting hurt\nhurts hurt\nhypertrophied hypertrophy\nhypertrophies hypertrophy\nhypertrophying hypertrophy\nidentified identify\nidentifies identify\nidentifying identify\nimbedded imbed\nimbedding imbed\nimbeds imbed\nimbrued imbrue\nimbrues imbrue\nimbruing imbrue\nimbued imbue\nimbues imbue\nimbuing imbue\nimpaneled impanel\nimpaneling impanel\nimpanelled impanel\nimpanelling impanel\nimpanells impanel\nimpanels impanel\nimpelled impel\nimpelling impel\nimpels impel\nimplied imply\nimplies imply\nimplying imply\ninbred inbreed\ninbreeding inbreed\ninbreeds inbreed\nincurred incur\nincurring incur\nincurs incur\nindemnified indemnify\nindemnifies indemnify\nindemnifying indemnify\nindued indue\nindues indue\ninduing indue\nindwelling indwell\nindwells indwell\nindwelt indwell\ninferred infer\ninferring infer\ninfers infer\ninitialed initial\ninitialing initial\ninitialled initial\ninitialling initial\ninitials initial\ninlaid inlay\ninlaying inlay\ninlays inlay\ninlets inlet\ninsets inset\ninsetting inset\ninspanned inspan\ninspanning inspan\ninspans inspan\ninstalled instal install\ninstalling instal install\ninstalls install\ninstals instal\nintensified intensify\nintensifies intensify\nintensifying intensify\ninterbred interbreed\ninterbreeding interbreed\ninterbreeds interbreed\nintercropped intercrop\nintercropping intercrop\nintercrops intercrop\nintercuts intercut\nintercutting intercut\ninterlaid interlay\ninterlapped interlap\ninterlapping interlap\ninterlaps interlap\ninterlaying interlay\ninterlays interlay\nintermarried intermarry\nintermarries intermarry\nintermarrying intermarry\nintermits intermit\nintermitted intermit\nintermitting intermit\ninterpleaded interplead\ninterpleading interplead\ninterpleads interplead\ninterpled interplead\ninterred inter\ninterring inter\ninters inter\ninterstratified interstratify\ninterstratifies interstratify\ninterstratifying interstratify\ninterweaved interweave\ninterweaves interweave\ninterweaving interweave\ninterwove interweave\ninterwoven interweave\nintrigued intrigue\nintrigues intrigue\nintriguing intrigue\nintromits intromit\nintromitted intromit\nintromitting intromit\ninweaved inweave\ninweaves inweave\ninweaving inweave\ninwove inweave\ninwoven inweave\ninwrapped inwrap\ninwrapping inwrap\ninwraps inwrap\nis be\nissued issue\nissues issue\nissuing issue\njabbed jab\njabbing jab\njabs jab\njagged jag\njagging jag\njags jag\njammed jam\njamming jam\njams jam\njapanned japan\njapanning japan\njapans japan\njarred jar\njarring jar\njars jar\njelled jell\njellied jelly\njellies jelly\njellified jellify\njellifies jellify\njellifying jellify\njelling jell\njells jell\njellying jelly\njemmied jemmy\njemmies jemmy\njemmying jemmy\njerry-building jerry-build\njerry-builds jerry-build\njerry-built jerry-build\njets jet\njetted jet\njetting jet\njeweled jewel\njeweling jewel\njewelled jewel\njewelling jewel\njewels jewel\njibbed jib\njibbing jib\njibs jib\njigged jig\njigging jig\njigs jig\njimmied jimmy\njimmies jimmy\njimmying jimmy\njitterbugged jitterbug\njitterbugging jitterbug\njitterbugs jitterbug\njobbed job\njobbing job\njobs job\njog-trots jog-trot\njog-trotted jog-trot\njog-trotting jog-trot\njogged jog\njogging jog\njogs jog\njoined_battle join_battle\njoined_forces join_forces\njoining_battle join_battle\njoining_forces join_forces\njoins_battle join_battle\njoins_forces join_forces\njollied jolly\njollies jolly\njollified jollify\njollifies jollify\njollifying jollify\njollying jolly\njots jot\njotted jot\njotting jot\njoy-ridden joy-ride\njoy-rides joy-ride\njoy-riding joy-ride\njoy-rode joy-ride\njoypopped joypop\njoypopping joypop\njoypops joypop\njugged jug\njugging jug\njugs jug\njumped_off jump_off\njumping_off jump_off\njumps_off jump_off\njustified justify\njustifies justify\njustifying justify\njuts jut\njutted jut\njutting jut\nkeeping keep\nkeeps keep\nkenned ken\nkenneled kennel\nkenneling kennel\nkennelled kennel\nkennelling kennel\nkennels kennel\nkenning ken\nkens ken\nkent ken\nkept keep\nkerneled kernel\nkerneling kernel\nkernelled kernel\nkernelling kernel\nkernels kernel\nkidded kid\nkidding kid\nkidnaped kidnap\nkidnaping kidnap\nkidnapped kidnap\nkidnapping kidnap\nkidnaps kidnap\nkids kid\nkipped kip\nkipping kip\nkips kip\nknapped knap\nknapping knap\nknaps knap\nkneecapped kneecap\nkneecapping kneecap\nkneecaps kneecap\nkneed knee\nkneeing knee\nkneeled kneel\nkneeling kneel\nkneels kneel\nknees knee\nknelt kneel\nknew know\nknits knit\nknitted knit\nknitting knit\nknobbed knob\nknobbing knob\nknobs knob\nknots knot\nknotted knot\nknotting knot\nknowing know\nknown know\nknows know\nko'd ko\nko'ing ko\nko's ko\nlabeled label\nlabeling label\nlabelled label\nlabelling label\nlabels label\nladed lade\nladen lade\nlades lade\nlading lade\nladyfied ladify\nladyfies ladify\nladyfying ladify\nlagged lag\nlagging lag\nlags lag\nlaicized laicize\nlaicizes laicize\nlaicizing laicize\nlaid lay\nlain lie\nlallygagged lallygag\nlallygagging lallygag\nlallygags lallygag\nlammed lam\nlamming lam\nlams lam\nlapidified lapidify\nlapidifies lapidify\nlapidifying lapidify\nlapped lap\nlapping lap\nlaps lap\nlassoed lasso\nlassoes lasso\nlassoing lasso\nlassos lasso\nlaureled laurel\nlaureling laurel\nlaurelled laurel\nlaurelling laurel\nlaurels laurel\nlay lie\nlayed_for lie_for\nlaying lay\nlaying_for lie_for\nlays lay\nlays_for lie_for\nleading lead\nleads lead\nleagued league\nleagues league\nleaguing league\nleaned lean\nleaning lean\nleans lean\nleant lean\nleaped leap\nleapfrogged leapfrog\nleapfrogging leapfrog\nleapfrogs leapfrog\nleaping leap\nleaps leap\nleapt leap\nlearned learn\nlearning learn\nlearns learn\nlearnt learn\nleaves leave\nleaves_undone leave_undone\nleaving leave\nleaving_undone leave_undone\nled lead\nleft leave\nleft_undone leave_undone\nlegitimized legitimize\nlegitimizes legitimize\nlegitimizing legitimize\nlending lend\nlends lend\nlent lend\nlets let\nletting let\nleveled level\nleveling level\nlevelled level\nlevelling level\nlevels level\nlevied levy\nlevies levy\nlevying levy\nlibeled libel\nlibeling libel\nlibelled libel\nlibelling libel\nlibels libel\nlied lie\nlies lie\nlighted light\nlighting light\nlights light\nlignified lignify\nlignifies lignify\nlignifying lignify\nlip-reading lip-read\nlip-reads lip-read\nlipped lip\nlipping lip\nlips lip\nliquefied liquefy\nliquefies liquefy\nliquefying liquefy\nliquified liquify\nliquifies liquify\nliquifying liquify\nlit light\nlobbed lob\nlobbied lobby\nlobbies lobby\nlobbing lob\nlobbying lobby\nlobs lob\nlogged log\nlogging log\nlogs log\nlooked_towards look_towards\nlooking_towards look_towards\nlooks_towards look_towards\nlopped lop\nlopping lop\nlops lop\nloses lose\nlosing lose\nlost lose\nlots lot\nlotted lot\nlotting lot\nlugged lug\nlugging lug\nlugs lug\nlullabied lullaby\nlullabies lullaby\nlullabying lullaby\nlying lie\nmachine-gunned machine-gun\nmachine-gunning machine-gun\nmachine-guns machine-gun\nmadded mad\nmadding mad\nmade make\nmads mad\nmagnified magnify\nmagnifies magnify\nmagnifying magnify\nmakes make\nmaking make\nmanned man\nmanning man\nmans man\nmanumits manumit\nmanumitted manumit\nmanumitting manumit\nmapped map\nmapping map\nmaps map\nmarcelled marcel\nmarcelling marcel\nmarcels marcel\nmarred mar\nmarried marry\nmarries marry\nmarring mar\nmarrying marry\nmars mar\nmarshaled marshal\nmarshaling marshal\nmarshalled marshal\nmarshalling marshal\nmarshals marshal\nmarveled marvel\nmarveling marvel\nmarvelled marvel\nmarvelling marvel\nmarvels marvel\nmats mat\nmatted mat\nmatting mat\nmeaning mean\nmeans mean\nmeant mean\nmedaled medal\nmedaling medal\nmedalled medal\nmedalling medal\nmedals medal\nmeeting meet\nmeets meet\nmelted melt\nmelting melt\nmelts melt\nmet meet\nmetaled metal\nmetaling metal\nmetalled metal\nmetalling metal\nmetals metal\nmetrified metrify\nmetrifies metrify\nmetrifying metrify\nmight may\nmilitated_against militate_against\nmilitates_against militate_against\nmilitating_against militate_against\nmimicked mimic\nmimicking mimic\nmimics mimic\nminified minify\nminifies minify\nminifying minify\nmisapplied misapply\nmisapplies misapply\nmisapplying misapply\nmisbecame misbecome\nmisbecomes misbecome\nmisbecoming misbecome\nmiscarried miscarry\nmiscarries miscarry\nmiscarrying miscarry\nmiscasting miscast\nmiscasts miscast\nmisconstrued misconstrue\nmisconstrues misconstrue\nmisconstruing misconstrue\nmisdealing misdeal\nmisdeals misdeal\nmisdealt misdeal\nmisfits misfit\nmisfitted misfit\nmisfitting misfit\nmisgave misgive\nmisgiven misgive\nmisgives misgive\nmisgiving misgive\nmisheard mishear\nmishearing mishear\nmishears mishear\nmishits mishit\nmishitting mishit\nmislaid mislay\nmislaying mislay\nmislays mislay\nmisleading mislead\nmisleads mislead\nmisled mislead\nmispleaded misplead\nmispleading misplead\nmispleads misplead\nmispled misplead\nmisreading misread\nmisreads misread\nmisspelled misspell\nmisspelling misspell\nmisspells misspell\nmisspelt misspell\nmisspending misspend\nmisspends misspend\nmisspent misspend\nmistaken mistake\nmistakes mistake\nmistaking mistake\nmistook mistake\nmisunderstanding misunderstand\nmisunderstands misunderstand\nmisunderstood misunderstand\nmobbed mob\nmobbing mob\nmobs mob\nmodeled model\nmodeling model\nmodelled model\nmodelling model\nmodels model\nmodified modify\nmodifies modify\nmodifying modify\nmollified mollify\nmollifies mollify\nmollifying mollify\nmolten melt\nmoonlighted moonlight\nmoonlighting moonlight\nmoonlights moonlight\nmopped mop\nmopping mop\nmops mop\nmortified mortify\nmortifies mortify\nmortifying mortify\nmowed mow\nmowing mow\nmown mow\nmows mow\nmudded mud\nmuddied muddy\nmuddies muddy\nmudding mud\nmuddying muddy\nmuds mud\nmugged mug\nmugging mug\nmugs mug\nmultiplied multiply\nmultiplies multiply\nmultiplying multiply\nmummed mum\nmummified mummify\nmummifies mummify\nmummifying mummify\nmumming mum\nmums mum\nmutinied mutiny\nmutinies mutiny\nmutinying mutiny\nmystified mystify\nmystifies mystify\nmystifying mystify\nnabbed nab\nnabbing nab\nnabs nab\nnagged nag\nnagging nag\nnags nag\nnapped nap\nnapping nap\nnaps nap\nnets net\nnetted net\nnetting net\nnibbed nib\nnibbing nib\nnibs nib\nnickeled nickel\nnickeling nickel\nnickelled nickel\nnickelling nickel\nnickels nickel\nnid-nodded nid-nod\nnid-nodding nid-nod\nnid-nods nid-nod\nnidified nidify\nnidifies nidify\nnidifying nidify\nnielloed niello\nnielloing niello\nniellos niello\nnigrified nigrify\nnigrifies nigrify\nnigrifying nigrify\nnipped nip\nnipping nip\nnips nip\nnitrified nitrify\nnitrifies nitrify\nnitrifying nitrify\nnodded nod\nnodding nod\nnods nod\nnon-prossed non-pros\nnon-prosses non-pros\nnon-prossing non-pros\nnonplused nonplus\nnonpluses nonplus\nnonplusing nonplus\nnonplussed nonplus\nnonplusses nonplus\nnonplussing nonplus\nnotified notify\nnotifies notify\nnotifying notify\nnullified nullify\nnullifies nullify\nnullifying nullify\nnuts nut\nnutted nut\nnutting nut\nobjectified objectify\nobjectifies objectify\nobjectifying objectify\noccupied occupy\noccupies occupy\noccupying occupy\noccurred occur\noccurring occur\noccurs occur\noffsets offset\noffsetting offset\nomits omit\nomitted omit\nomitting omit\nopaqued opaque\nopaques opaque\nopaquing opaque\nopsonized opsonize\nopsonizes opsonize\nopsonizing opsonize\nossified ossify\nossifies ossify\nossifying ossify\noutbidden outbid\noutbidding outbid\noutbids outbid\noutbred outbreed\noutbreeding outbreed\noutbreeds outbreed\noutcried outcry\noutcries outcry\noutcropped outcrop\noutcropping outcrop\noutcrops outcrop\noutcrying outcry\noutdid outdo\noutdoes outdo\noutdoing outdo\noutdone outdo\noutdrawing outdraw\noutdrawn outdraw\noutdraws outdraw\noutdrew outdraw\noutfits outfit\noutfitted outfit\noutfitting outfit\noutfought outfight\noutgassed outgas\noutgasses outgas\noutgassing outgas\noutgeneraled outgeneral\noutgeneraling outgeneral\noutgeneralled outgeneral\noutgeneralling outgeneral\noutgenerals outgeneral\noutgoes outgo\noutgoing outgo\noutgone outgo\noutgrew outgrow\noutgrowing outgrow\noutgrown outgrow\noutgrows outgrow\noutlaid outlay\noutlaying outlay\noutlays outlay\noutmanned outman\noutmanning outman\noutmans outman\noutputted output\noutputting output\noutran outrun\noutridden outride\noutrides outride\noutriding outride\noutrode outride\noutrunning outrun\noutruns outrun\noutselling outsell\noutsells outsell\noutshines outshine\noutshining outshine\noutshone outshine\noutshooting outshoot\noutshoots outshoot\noutshot outshoot\noutsold outsell\noutspanned outspan\noutspanning outspan\noutspans outspan\noutspreading outspread\noutspreads outspread\noutstanding outstand\noutstands outstand\noutstood outstand\noutstripped outstrip\noutstripping outstrip\noutstrips outstrip\noutthinking outthink\noutthinks outthink\noutthought outthink\noutwearing outwear\noutwears outwear\noutwent outgo\noutwits outwit\noutwitted outwit\noutwitting outwit\noutwore outwear\noutworn outwear\noverbearing overbear\noverbears overbear\noverbidden overbid\noverbidding overbid\noverbids overbid\noverblew overblow\noverblowing overblow\noverblown overblow\noverblows overblow\noverbore overbear\noverborne overbear\noverbuilding overbuild\noverbuilds overbuild\noverbuilt overbuild\novercame overcome\novercomes overcome\novercoming overcome\novercropped overcrop\novercropping overcrop\novercrops overcrop\noverdid overdo\noverdoes overdo\noverdoing overdo\noverdone overdo\noverdrawing overdraw\noverdrawn overdraw\noverdraws overdraw\noverdrew overdraw\noverdriven overdrive\noverdrives overdrive\noverdriving overdrive\noverdrove overdrive\noverflew overfly\noverflies overfly\noverflowed overflow\noverflowing overflow\noverflown overflow overfly\noverflows overflow\noverflying overfly\novergrew overgrow\novergrowing overgrow\novergrown overgrow\novergrows overgrow\noverhanging overhang\noverhangs overhang\noverheard overhear\noverhearing overhear\noverhears overhear\noverhung overhang\noverissued overissue\noverissues overissue\noverissuing overissue\noverlaid overlay\noverlain overlie\noverlapped overlap\noverlapping overlap\noverlaps overlap\noverlay overlie\noverlaying overlay\noverlays overlay\noverlies overlie\noverlying overlie\novermanned overman\novermanning overman\novermans overman\noverpaid overpay\noverpassed overpass\noverpasses overpass\noverpassing overpass\noverpast overpass\noverpaying overpay\noverpays overpay\noverran overrun\noverridden override\noverrides override\noverriding override\noverrode override\noverrunning overrun\noverruns overrun\noversaw oversee\noverseeing oversee\noverseen oversee\noversees oversee\noverselling oversell\noversells oversell\noversets overset\noversetting overset\noversewed oversew\noversewing oversew\noversewn oversew\noversews oversew\novershooting overshoot\novershoots overshoot\novershot overshoot\noversimplified oversimplify\noversimplifies oversimplify\noversimplifying oversimplify\noversleeping oversleep\noversleeps oversleep\noverslept oversleep\noversold oversell\noverspending overspend\noverspends overspend\noverspent overspend\noverspilled overspill\noverspilling overspill\noverspills overspill\noverspilt overspill\noverstepped overstep\noverstepping overstep\noversteps overstep\novertaken overtake\novertakes overtake\novertaking overtake\noverthrew overthrow\noverthrowing overthrow\noverthrown overthrow\noverthrows overthrow\novertook overtake\novertopped overtop\novertopping overtop\novertops overtop\noverwinding overwind\noverwinds overwind\noverwound overwind\noverwrites overwrite\noverwriting overwrite\noverwritten overwrite\noverwrote overwrite\npacified pacify\npacifies pacify\npacifying pacify\npadded pad\npadding pad\npads pad\npaid pay\npalled pal\npalling pal\npals pal\npalsied palsy\npalsies palsy\npalsying palsy\npandied pandy\npandies pandy\npandying pandy\npaneled panel\npaneling panel\npanelled panel\npanelling panel\npanels panel\npanicked panic\npanicking panic\npanics panic\npanned pan\npanning pan\npans pan\nparalleled parallel\nparalleling parallel\nparallelled parallel\nparallelling parallel\nparallels parallel\nparceled parcel\nparceling parcel\nparcelled parcel\nparcelling parcel\nparcels parcel\nparenthesized parenthesize\nparenthesizes parenthesize\nparenthesizing parenthesize\nparodied parody\nparodies parody\nparodying parody\nparried parry\nparries parry\nparrying parry\npartaken partake\npartakes partake\npartaking partake\npartook partake\npasquil pasquinade\npasquilled pasquinade\npasquilling pasquinade\npasquils pasquinade\npasquinaded pasquinade\npasquinades pasquinade\npasquinading pasquinade\npatrolled patrol\npatrolling patrol\npatrols patrol\npats pat\npatted pat\npatting pat\npayed pay\npaying pay\npays pay\npedaled pedal\npedaling pedal\npedalled pedal\npedalling pedal\npedals pedal\npeed pee\npeeing pee\npees pee\npegged peg\npegging peg\npegs peg\npenciled pencil\npenciling pencil\npencilled pencil\npencilling pencil\npencils pencil\npenned pen\npenning pen\npens pen\npent pen\npepped pep\npepping pep\npeps pep\npermits permit\npermitted permit\npermitting permit\npersonified personify\npersonifies personify\npersonifying personify\npetrified petrify\npetrifies petrify\npetrifying petrify\npets pet\npetted pet\npettifogged pettifog\npettifogging pettifog\npettifogs pettifog\npetting pet\nphantasied phantasy\nphantasies phantasy\nphantasying phantasy\nphotocopied photocopy\nphotocopies photocopy\nphotocopying photocopy\nphotomapped photomap\nphotomapping photomap\nphotomaps photomap\nphotosets photoset\nphotosetting photoset\nphysicked physic\nphysicking physic\nphysics physic\npicnicked picnic\npicnicking picnic\npicnics picnic\npied pie\npieing pie\npies pie\npigged pig\npigging pig\npigs pig\npiing pie\npilloried pillory\npillories pillory\npillorying pillory\npinch-hits pinch-hit\npinch-hitting pinch-hit\npinned pin\npinning pin\npins pin\npipped pip\npipping pip\npips pip\npiqued pique\npiques pique\npiquing pique\npistol-whipped pistol-whip\npistol-whipping pistol-whip\npistol-whips pistol-whip\npistoled pistol\npistoling pistol\npistolled pistol\npistolling pistol\npistols pistol\npitapats pitapat\npitapatted pitapat\npitapatting pitapat\npitied pity\npities pity\npits pit\npitted pit\npitting pit\npitying pity\nplagued plague\nplagues plague\nplaguing plague\nplanned plan\nplanning plan\nplans plan\nplats plat\nplatted plat\nplatting plat\nplayed_a_part play_a_part\nplaying_a_part play_a_part\nplays_a_part play_a_part\npleaded plead\npleading plead\npleads plead\npled plead\nplied ply\nplies ply\nplodded plod\nplodding plod\nplods plod\nplopped plop\nplopping plop\nplops plop\nplots plot\nplotted plot\nplotting plot\nplugged plug\nplugging plug\nplugs plug\nplying ply\npodded pod\npodding pod\npods pod\npolkaed polka\npolkaing polka\npolkas polka\npommeled pommel\npommeling pommel\npommelled pommel\npommelling pommel\npommels pommel\npopped pop\npopping pop\npops pop\npots pot\npotted pot\npotting pot\npreachified preachify\npreachifies preachify\npreachifying preachify\nprecanceled precancel\nprecanceling precancel\nprecancelled precancel\nprecancelling precancel\nprecancels precancel\nprecasting precast\nprecasts precast\npreferred prefer\npreferring prefer\nprefers prefer\npreoccupied preoccupy\npreoccupies preoccupy\npreoccupying preoccupy\nprepaid prepay\nprepaying prepay\nprepays prepay\npresignified presignify\npresignifies presignify\npresignifying presignify\npretermits pretermit\npretermitted pretermit\npretermitting pretermit\nprettied pretty\npretties pretty\nprettified prettify\nprettifies prettify\nprettifying prettify\nprettying pretty\npried pry\npries pry\nprigged prig\nprigging prig\nprigs prig\nprimmed prim\nprimming prim\nprims prim\nprodded prod\nprodding prod\nprods prod\nprogrammed program\nprogrammes program\nprogramming program\nprograms program\nprologed prologue\nprologing prologue\nprologs prologue\nprologued prologue\nprologues prologue\nprologuing prologue\nproofreading proofread\nproofreads proofread\npropelled propel\npropelling propel\npropels propel\nprophesied prophesy\nprophesies prophesy\nprophesying prophesy\npropped prop\npropping prop\nprops prop\nproved prove\nproven prove\nproves prove\nproving prove\nprying pry\npubbed pub\npubbing pub\npubs pub\npugged pug\npugging pug\npugs pug\npummeled pummel\npummeling pummel\npummelled pummel\npummelling pummel\npummels pummel\npunned pun\npunning pun\npuns pun\npupped pup\npupping pup\npups pup\npureed puree\npureeing puree\npurees puree\npurified purify\npurifies purify\npurifying purify\npursued pursue\npursues pursue\npursuing pursue\nput-puts put-put\nput-putted put-put\nput-putting put-put\nputrefied putrefy\nputrefies putrefy\nputrefying putrefy\nputs put\nputtied putty\nputties putty\nputting put\nputtying putty\nqualified qualify\nqualifies qualify\nqualifying qualify\nquantified quantify\nquantifies quantify\nquantifying quantify\nquarreled quarrel\nquarreling quarrel\nquarrelled quarrel\nquarrelling quarrel\nquarrels quarrel\nquarried quarry\nquarries quarry\nquarrying quarry\nquartersawed quartersaw\nquartersawing quartersaw\nquartersawn quartersaw\nquartersaws quartersaw\nqueried query\nqueries query\nquerying query\nqueued queue\nqueues queue\nqueuing queue\nquick-freezes quick-freeze\nquick-freezing quick-freeze\nquick-froze quick-freeze\nquick-frozen quick-freeze\nquickstepped quickstep\nquickstepping quickstep\nquicksteps quickstep\nquipped quip\nquipping quip\nquips quip\nquits quit\nquitted quit\nquitting quit\nquizzed quiz\nquizzes quiz\nquizzing quiz\nradioed radio\nradioing radio\nradios radio\nragged rag\nragging rag\nragouted ragout\nragouting ragout\nragouts ragout\nrags rag\nrallied rally\nrallies rally\nrallying rally\nramified ramify\nramifies ramify\nramifying ramify\nrammed ram\nramming ram\nrams ram\nran run\nrang ring\nrapped rap\nrappelled rappel\nrappelling rappel\nrappels rappel\nrapping rap\nraps rap\nrarfied rarefy\nrarfies rarefy\nrarfying rarefy\nratified ratify\nratifies ratify\nratifying ratify\nrats rat\nratted rat\nratting rat\nraveled ravel\nraveling ravel\nravelled ravel\nravelling ravel\nravels ravel\nraz-cuts raz-cut\nraz-cutting raz-cut\nrazeed razee\nrazeeing razee\nrazees razee\nre-treading re-tread\nre-treads re-tread\nre-trod re-tread\nre-trodden re-tread\nreading read\nreads read\nreaved reave\nreaves reave\nreaving reave\nrebelled rebel\nrebelling rebel\nrebels rebel\nrebuilt rebuild\nrebuts rebut\nrebutted rebut\nrebutting rebut\nrecapped recap\nrecapping recap\nrecaps recap\nrecced recce\nrecceed recce\nrecceing recce\nrecces recce\nreclassified reclassify\nreclassifies reclassify\nreclassifying reclassify\nrecommits recommit\nrecommitted recommit\nrecommitting recommit\nrecopied recopy\nrecopies recopy\nrecopying recopy\nrectified rectify\nrectifies rectify\nrectifying rectify\nrecurred recur\nrecurring recur\nrecurs recur\nred red\nred-pencilled red-pencil\nred-pencilling red-pencil\nred-pencils red-pencil\nredded red redd\nredding red redd\nredds redd\nredid redo\nredoes redo\nredoing redo\nredone redo\nreds red\nreeved reeve\nreeves reeve\nreeving reeve\nrefereed referee\nrefereeing referee\nreferees referee\nreferred refer\nreferring refer\nrefers refer\nrefits refit\nrefitted refit\nrefitting refit\nreft reave\nrefueled refuel\nrefueling refuel\nrefuelled refuel\nrefuelling refuel\nrefuels refuel\nregrets regret\nregretted regret\nregretting regret\nreheard rehear\nrehearing rehear\nrehears rehear\nreified reify\nreifies reify\nreifying reify\nrelied rely\nrelies rely\nrelying rely\nremade remake\nremakes remake\nremaking remake\nremarried remarry\nremarries remarry\nremarrying remarry\nremits remit\nremitted remit\nremitting remit\nrending rend\nrends rend\nrent rend\nrepaid repay\nrepaying repay\nrepays repay\nrepelled repel\nrepelling repel\nrepels repel\nreplevied replevy\nreplevies replevy\nreplevying replevy\nreplied reply\nreplies reply\nreplying reply\nrepots repot\nrepotted repot\nrepotting repot\nreran rerun\nrerunning rerun\nreruns rerun\nresat resit\nrescued rescue\nrescues rescue\nrescuing rescue\nresets reset\nresetting reset\nresits resit\nresitting resit\nretaken retake\nretakes retake\nretaking retake\nretelling retell\nretells retell\nrethinking rethink\nrethinks rethink\nrethought rethink\nretold retell\nretook retake\nretransmits retransmit\nretransmitted retransmit\nretransmitting retransmit\nretreaded retread\nretreading retread\nretreads retread\nretried retry\nretries retry\nretrofits retrofit\nretrofitted retrofit\nretrofitting retrofit\nretrying retry\nrets ret\nretted ret\nretting ret\nreunified reunify\nreunifies reunify\nreunifying reunify\nrevalorized revalorize\nrevalorizes revalorize\nrevalorizing revalorize\nreveled revel\nreveling revel\nrevelled revel\nrevelling revel\nrevels revel\nrevets revet\nrevetted revet\nrevetting revet\nrevivified revivify\nrevivifies revivify\nrevivifying revivify\nrevs rev\nrevved rev\nrevving rev\nrewinding rewind\nrewinds rewind\nrewound rewind\nrewrites rewrite\nrewriting rewrite\nrewritten rewrite\nrewrote rewrite\nribbed rib\nribbing rib\nribs rib\nricocheted ricochet\nricocheting ricochet\nricochets ricochet\nricochetted ricochet\nricochetting ricochet\nridded rid\nridden ride\nridding rid\nrides ride\nriding ride\nrids rid\nrigged rig\nrigging rig\nrigidified rigidify\nrigidifies rigidify\nrigidifying rigidify\nrigs rig\nrimmed rim\nrimming rim\nrims rim\nringed ring\nringing ring\nrings ring\nripped rip\nripping rip\nrips rip\nrisen rise\nrises rise\nrising rise\nrivaled rival\nrivaling rival\nrivalled rival\nrivalling rival\nrivals rival\nrived rive\nriven rive\nrives rive\nriving rive\nrobbed rob\nrobbing rob\nrobs rob\nrode ride\nroqueted roquet\nroqueting roquet\nroquets roquet\nrose rise\nrots rot\nrotted rot\nrotting rot\nrough-dried rough-dry\nrough-dries rough-dry\nrough-drying rough-dry\nrough-hewed rough-hew\nrough-hewing rough-hew\nrough-hewn rough-hew\nrough-hews rough-hew\nroughcasting roughcast\nroughcasts roughcast\nrove reeve\nroweled rowel\nroweling rowel\nrowelled rowel\nrowelling rowel\nrowels rowel\nrubbed rub\nrubbing rub\nrubs rub\nrued rue\nrues rue\nruggedized ruggedize\nruggedizes ruggedize\nruggedizing ruggedize\nruing rue\nrung ring\nrunning run\nruns run\nruts rut\nrutted rut\nrutting rut\nsaccharified saccharify\nsaccharifies saccharify\nsaccharifying saccharify\nsagged sag\nsagging sag\nsags sag\nsaid say\nsalaried salary\nsalaries salary\nsalarying salary\nsalified salify\nsalifies salify\nsalifying salify\nsallied sally\nsallies sally\nsallying sally\nsambaed samba\nsambaing samba\nsambas samba\nsanctified sanctify\nsanctifies sanctify\nsanctifying sanctify\nsand-casting sand-cast\nsand-casts sand-cast\nsandbagged sandbag\nsandbagging sandbag\nsandbags sandbag\nsang sing\nsank sink\nsaponified saponify\nsaponifies saponify\nsaponifying saponify\nsapped sap\nsapping sap\nsaps sap\nsat sit\nsatisfied satisfy\nsatisfies satisfy\nsatisfying satisfy\nsauteed saute\nsauteing saute\nsautes saute\nsavvied savvy\nsavvies savvy\nsavvying savvy\nsaw see\nsawed saw\nsawing saw\nsawn saw\nsaws saw\nsaying say\nsays say\nscagged scag\nscagging scag\nscags scag\nscanned scan\nscanning scan\nscans scan\nscarified scarify\nscarifies scarify\nscarifying scarify\nscarred scar\nscarring scar\nscars scar\nscats scat\nscatted scat\nscatting scat\nscended scend\nscending scend\nscends scend\nscorified scorify\nscorifies scorify\nscorifying scorify\nscragged scrag\nscragging scrag\nscrags scrag\nscrammed scram\nscramming scram\nscrams scram\nscrapped scrap\nscrapping scrap\nscraps scrap\nscried scry\nscries scry\nscrubbed scrub\nscrubbing scrub\nscrubs scrub\nscrummed scrum\nscrumming scrum\nscrums scrum\nscrying scry\nscudded scud\nscudding scud\nscuds scud\nscummed scum\nscumming scum\nscums scum\nscurried scurry\nscurries scurry\nscurrying scurry\nseed seed\nseeing see\nseeking seek\nseeks seek\nseen see\nsees see\nselling sell\nsells sell\nsending send\nsends send\nsent send\nsets set\nsetting set\nsewed sew\nsewing sew\nsewn sew\nsews sew\nshagged shag\nshagging shag\nshags shag\nshaken shake\nshaken_hands shake_hands\nshakes shake\nshakes_hands shake_hands\nshaking shake\nshaking_hands shake_hands\nshammed sham\nshamming sham\nshampooed shampoo\nshampooing shampoo\nshampoos shampoo\nshams sham\nshanghaied shanghai\nshanghaiing shanghai\nshanghais shanghai\nsharecropped sharecrop\nsharecropping sharecrop\nsharecrops sharecrop\nshaved shave\nshaven shave\nshaves shave\nshaving shave\nsheared shear\nshearing shear\nshears shear\nshed shed\nshedding shed\nsheds shed\nshellacked shellac\nshellacking shellac\nshellacs shellac\nshending shend\nshends shend\nshent shend\nshewed shew\nshewing shew\nshewn shew\nshews shew\nshied shy\nshies shy\nshikarred shikar\nshikarring shikar\nshikars shikar\nshillyshallied shillyshally\nshillyshallies shillyshally\nshillyshallying shillyshally\nshimmed shim\nshimmied shimmy\nshimmies shimmy\nshimming shim\nshimmying shimmy\nshims shim\nshines shine\nshining shine\nshinned shin\nshinning shin\nshins shin\nshipped ship\nshipping ship\nships ship\nshits shit\nshitted shit\nshitting shit\nshod shoe\nshoeing shoe\nshoes shoe\nshone shine\nshooed shoo\nshooing shoo\nshook shake\nshook_hands shake_hands\nshoos shoo\nshooting shoot\nshoots shoot\nshopped shop\nshopping shop\nshops shop\nshot shoot\nshotgunned shotgun\nshotgunning shotgun\nshotguns shotgun\nshots shot\nshotted shot\nshotting shot\nshoveled shovel\nshoveling shovel\nshovelled shovel\nshovelling shovel\nshovels shovel\nshowed show\nshowing show\nshown show\nshows show\nshrank shrink\nshredded shred\nshredding shred\nshrink-wrapped shrink-wrap\nshrink-wrapping shrink-wrap\nshrink-wraps shrink-wrap\nshrinking shrink\nshrinks shrink\nshrived shrive\nshriveled shrivel\nshriveling shrivel\nshrivelled shrivel\nshrivelling shrivel\nshrivels shrivel\nshriven shrive\nshrives shrive\nshriving shrive\nshrove shrive\nshrugged shrug\nshrugging shrug\nshrugs shrug\nshrunk shrink\nshrunken shrink\nshunned shun\nshunning shun\nshuns shun\nshuts shut\nshutting shut\nshying shy\nsicked sic\nsicking sic\nsics sic\nsideslipped sideslip\nsideslipping sideslip\nsideslips sideslip\nsidestepped sidestep\nsidestepping sidestep\nsidesteps sidestep\nsight-reading sight-read\nsight-reads sight-read\nsightsaw sightsee\nsightseeing sightsee\nsightseen sightsee\nsightsees sightsee\nsignaled signal\nsignaling signal\nsignalled signal\nsignalling signal\nsignals signal\nsignified signify\nsignifies signify\nsignifying signify\nsilicified silicify\nsilicifies silicify\nsilicifying silicify\nsimplified simplify\nsimplifies simplify\nsimplifying simplify\nsinging sing singe\nsingle-stepped single-step\nsingle-stepping single-step\nsingle-steps single-step\nsings sing\nsinking sink\nsinks sink\nsinned sin\nsinning sin\nsipped sip\nsipping sip\nsips sip\nsits sit\nsitting sit\nskellied skelly\nskellies skelly\nskellying skelly\nskenned sken\nskenning sken\nskens sken\nskets sket\nsketted sket\nsketting sket\nski'd ski\nskidded skid\nskidding skid\nskids skid\nskied ski\nskies sky\nskiing ski\nskimmed skim\nskimming skim\nskims skim\nskin-popped skin-pop\nskin-popping skin-pop\nskin-pops skin-pop\nskinned skin\nskinning skin\nskinny-dipped skinny-dip\nskinny-dipping skinny-dip\nskinny-dips skinny-dip\nskins skin\nskipped skip\nskipping skip\nskips skip\nskis ski\nskivvied skivvy\nskivvies skivvy\nskivvying skivvy\nskydived skydive\nskydives skydive\nskydiving skydive\nskydove skydive\nskying sky\nslabbed slab\nslabbing slab\nslabs slab\nslagged slag\nslagging slag\nslags slag\nslain slay\nslammed slam\nslamming slam\nslams slam\nslapped slap\nslapping slap\nslaps slap\nslats slat\nslatted slat\nslatting slat\nslaying slay\nslays slay\nsleeping sleep\nsleeps sleep\nslept sleep\nslew slay\nslid slide\nslidden slide\nslides slide\nsliding slide\nslinging sling\nslings sling\nslinking slink\nslinks slink\nslipped slip\nslipping slip\nslips slip\nslits slit\nslitting slit\nslogged slog\nslogging slog\nslogs slog\nslopped slop\nslopping slop\nslops slop\nslots slot\nslotted slot\nslotting slot\nslugged slug\nslugging slug\nslugs slug\nslummed slum\nslumming slum\nslums slum\nslung sling\nslunk slink\nslurred slur\nslurring slur\nslurs slur\nsmelled smell\nsmelling smell\nsmells smell\nsmelt smell\nsmit smite\nsmites smite\nsmiting smite\nsmitten smite\nsmote smite\nsmuts smut\nsmutted smut\nsmutting smut\nsnafued snafu\nsnafues snafu\nsnafuing snafu\nsnagged snag\nsnagging snag\nsnags snag\nsnapped snap\nsnapping snap\nsnaps snap\nsnedded sned\nsnedding sned\nsneds sned\nsnipped snip\nsnipping snip\nsnips snip\nsniveled snivel\nsniveling snivel\nsnivelled snivel\nsnivelling snivel\nsnivels snivel\nsnogged snog\nsnogging snog\nsnogs snog\nsnowshoed snowshoe\nsnowshoeing snowshoe\nsnowshoes snowshoe\nsnubbed snub\nsnubbing snub\nsnubs snub\nsnugged snug\nsnugging snug\nsnugs snug\nsobbed sob\nsobbing sob\nsobs sob\nsocialized socialize\nsocializes socialize\nsocializing socialize\nsodded sod\nsodding sod\nsods sod\nsoft-pedaled soft-pedal\nsoft-pedaling soft-pedal\nsoft-pedalled soft-pedal\nsoft-pedalling soft-pedal\nsoft-pedals soft-pedal\nsol-faed sol-fa\nsol-faing sol-fa\nsol-fas sol-fa\nsold sell\nsolemnified solemnify\nsolemnifies solemnify\nsolemnifying solemnify\nsolidified solidify\nsolidifies solidify\nsolidifying solidify\nsoothsaid soothsay\nsoothsaying soothsay\nsoothsays soothsay\nsopped sop\nsopping sop\nsops sop\nsortied sortie\nsortieing sortie\nsorties sortie\nsought seek\nsowed sow\nsowing sow\nsown sow\nsows sow\nspagged spag\nspagging spag\nspags spag\nspanceled spancel\nspanceling spancel\nspancelled spancel\nspancelling spancel\nspancels spancel\nspanned span\nspanning span\nspans span\nsparred spar\nsparring spar\nspars spar\nspat spit\nspats spat\nspatted spat\nspatting spat\nspeaking speak\nspeaks speak\nspecified specify\nspecifies specify\nspecifying specify\nsped speed\nspeechified speechify\nspeechifies speechify\nspeechifying speechify\nspeeded speed\nspeeding speed\nspeeds speed\nspellbinding spellbind\nspellbinds spellbind\nspellbound spellbind\nspelled spell\nspelling spell\nspells spell\nspelt spell\nspending spend\nspends spend\nspent spend\nspied spy\nspies spy\nspilled spill\nspilling spill\nspills spill\nspilt spill\nspin-dried spin-dry\nspin-dries spin-dry\nspin-drying spin-dry\nspinning spin\nspins spin\nspiraled spiral\nspiraling spiral\nspiralled spiral\nspiralling spiral\nspirals spiral\nspits spit\nspitted spit\nspitting spit\nsplits split\nsplitting split\nspoiled spoil\nspoiling spoil\nspoils spoil\nspoilt spoil\nspoke speak\nspoken speak\nspoon-fed spoon-feed\nspoon-feeding spoon-feed\nspoon-feeds spoon-feed\nspotlighted spotlight\nspotlighting spotlight\nspotlights spotlight\nspotlit spotlight\nspots spot\nspotted spot\nspotting spot\nsprang spring\nspreading spread\nspreads spread\nsprigged sprig\nsprigging sprig\nsprigs sprig\nspringing spring\nsprings spring\nsprung spring\nspudded spud\nspudding spud\nspuds spud\nspued spue\nspues spue\nspuing spue\nspun spin\nspurred spur\nspurring spur\nspurs spur\nspying spy\nsquats squat\nsquatted squat\nsquatting squat\nsqueegeed squeegee\nsqueegeeing squeegee\nsqueegees squeegee\nsquibbed squib\nsquibbing squib\nsquibs squib\nsquidded squid\nsquidding squid\nsquids squid\nsquilgee squeegee\nstabbed stab\nstabbing stab\nstabs stab\nstall-fed stall-feed\nstall-feeding stall-feed\nstall-feeds stall-feed\nstanding stand\nstands stand\nstank stink\nstarred star\nstarring star\nstars star\nstaved stave\nstaves stave\nstaving stave\nsteadied steady\nsteadies steady\nsteadying steady\nstealing steal\nsteals steal\nstellified stellify\nstellifies stellify\nstellifying stellify\nstemmed stem\nstemming stem\nstems stem\nstems_from stem_from\nstenciled stencil\nstenciling stencil\nstencilled stencil\nstencilling stencil\nstencils stencil\nstepped step\nstepping step\nsteps step\nstets stet\nstetted stet\nstetting stet\nsticked stick\nsticking stick\nsticks stick\nstied sty\nsties sty\nstilettoed stiletto\nstilettoeing stiletto\nstilettoes stiletto\nstinging sting\nstings sting\nstinking stink\nstinks stink\nstirred stir\nstirring stir\nstirs stir\nstole steal\nstolen steal\nstood stand\nstopped stop\nstopping stop\nstops stop\nstoried story\nstories story\nstorying story\nstots stot\nstotted stot\nstotting stot\nstove stave\nstrapped strap\nstrapping strap\nstraps strap\nstratified stratify\nstratifies stratify\nstratifying stratify\nstrewed strew\nstrewing strew\nstrewn strew\nstrews strew\nstridden stride\nstrikes strike\nstriking strike\nstringing string\nstrings string\nstripped strip\nstripping strip\nstrips strip\nstriven strive\nstrives strive\nstriving strive\nstrode stride\nstropped strop\nstropping strop\nstrops strop\nstrove strive\nstrowed strow\nstrowing strow\nstrown strow\nstrows strow\nstruck strike\nstrummed strum\nstrumming strum\nstrums strum\nstrung string\nstruts strut\nstrutted strut\nstrutting strut\nstubbed stub\nstubbing stub\nstubs stub\nstuccoed stucco\nstuccoes stucco\nstuccoing stucco\nstuccos stucco\nstuck stick\nstudded stud\nstudding stud\nstudied study\nstudies study\nstuds stud\nstudying study\nstultified stultify\nstultifies stultify\nstultifying stultify\nstummed stum\nstumming stum\nstums stum\nstung sting\nstunk stink\nstunned stun\nstunning stun\nstuns stun\nstupefied stupefy\nstupefies stupefy\nstupefying stupefy\nstying sty\nstymied stymie\nstymieing stymie\nstymies stymie\nstymying stymie\nsubbed sub\nsubbing sub\nsubdued subdue\nsubdues subdue\nsubduing subdue\nsubjectified subjectify\nsubjectifies subjectify\nsubjectifying subjectify\nsublets sublet\nsubletting sublet\nsubmits submit\nsubmitted submit\nsubmitting submit\nsubpoenaed subpoena\nsubpoenaing subpoena\nsubpoenas subpoena\nsubs sub\nsubtotaled subtotal\nsubtotaling subtotal\nsubtotalled subtotal\nsubtotalling subtotal\nsubtotals subtotal\nsued sue\nsues sue\nsuing sue\nsullied sully\nsullies sully\nsullying sully\nsulphureted sulphuret\nsulphureting sulphuret\nsulphurets sulphuret\nsulphuretted sulphuret\nsulphuretting sulphuret\nsummed sum\nsumming sum\nsums sum\nsung sing\nsunk sink\nsunken sink\nsunned sun\nsunning sun\nsuns sun\nsupped sup\nsupping sup\nsupplied supply\nsupplies supply\nsupplying supply\nsups sup\nswabbed swab\nswabbing swab\nswabs swab\nswagged swag\nswagging swag\nswags swag\nswam swim\nswapped swap\nswapping swap\nswaps swap\nswats swat\nswatted swat\nswatting swat\nswearing swear\nswears swear\nsweated sweat\nsweating sweat\nsweats sweat\nsweeping sweep\nsweeps sweep\nswelled swell\nswelling swell\nswells swell\nswept sweep\nswigged swig\nswigging swig\nswigs swig\nswimming swim\nswims swim\nswinging swing\nswings swing\nswiveled swivel\nswiveling swivel\nswivelled swivel\nswivelling swivel\nswivels swivel\nswollen swell\nswopped swap\nswopping swap\nswops swap\nswore swear\nsworn swear\nswots swot\nswotted swot\nswotting swot\nswum swim\nswung swing\nsyllabicated syllabicate\nsyllabicates syllabicate\nsyllabicating syllabicate\nsyllabified syllabify\nsyllabifies syllabify\nsyllabifying syllabify\nsymboled symbol\nsymboling symbol\nsymbolled symbol\nsymbolling symbol\nsymbols symbol\ntabbed tab\ntabbing tab\ntabs tab\ntagged tag\ntagging tag\ntags tag\ntaken take\ntaken_a_side take_a_side\ntaken_pains take_pains\ntaken_steps take_steps\ntakes take\ntakes_a_side take_a_side\ntakes_pains take_pains\ntakes_steps take_steps\ntaking take\ntaking_a_side take_a_side\ntaking_pains take_pains\ntaking_steps take_steps\ntalced talc\ntalcing talc\ntalcked talc\ntalcking talc\ntalcs talc\ntallied tally\ntallies tally\ntally-ho'd tally-ho\ntally-hoed tally-ho\ntally-hoing tally-ho\ntally-hos tally-ho\ntallying tally\ntammied tammy\ntammies tammy\ntammying tammy\ntangoed tango\ntangoes tango\ntangoing tango\ntanned tan\ntanning tan\ntans tan\ntapped tap\ntapping tap\ntaps tap\ntarred tar\ntarried tarry\ntarries tarry\ntarring tar\ntarrying tarry\ntars tar\ntasseled tassel\ntasseling tassel\ntasselled tassel\ntasselling tassel\ntassels tassel\ntats tat\ntatted tat\ntatting tat\ntattooed tattoo\ntattooing tattoo\ntattoos tattoo\ntaught teach\ntaxied taxi\ntaxies taxi\ntaxiing taxi\ntaxying taxi\nte-heed te-hee\nte-heeing te-hee\nte-hees te-hee\nteaches teach\nteaching teach\ntearing tear\ntears tear\nteaselled teasel\nteaselling teasel\nteasels teasel\ntedded ted\ntedding ted\nteds ted\nteed tee\nteeing tee\ntees tee\ntelecasted telecast\ntelecasting telecast\ntelecasts telecast\ntelling tell\ntells tell\ntepefied tepefy\ntepefies tepefy\ntepefying tepefy\nterrified terrify\nterrifies terrify\nterrifying terrify\ntestified testify\ntestifies testify\ntestifying testify\nthinking think\nthinking_the_world_of think_the_world_of\nthinks think\nthinks_the_world_of think_the_world_of\nthinned thin\nthinning thin\nthins thin\nthought think\nthought_the_world_of think_the_world_of\nthrew throw\nthrew_out throw_out\nthrived thrive\nthriven thrive\nthrives thrive\nthriving thrive\nthrobbed throb\nthrobbing throb\nthrobs throb\nthrove thrive\nthrowing throw\nthrowing_out throw_out\nthrown throw\nthrown_out throw_out\nthrows throw\nthrows_out throw_out\nthrummed thrum\nthrumming thrum\nthrums thrum\nthudded thud\nthudding thud\nthuds thud\ntidied tidy\ntidies tidy\ntidying tidy\ntied tie\nties tie\ntinged tinge\ntingeing tinge\ntinges tinge\ntinging tinge\ntinned tin\ntinning tin\ntins tin\ntinseled tinsel\ntinseling tinsel\ntinselled tinsel\ntinselling tinsel\ntinsels tinsel\ntipped tip\ntipping tip\ntips tip\ntiptoed tiptoe\ntiptoeing tiptoe\ntiptoes tiptoe\ntittuped tittup\ntittuping tittup\ntittupped tittup\ntittupping tittup\ntittups tittup\ntoadied toady\ntoadies toady\ntoadying toady\ntoed toe\ntoeing toe\ntoes toe\ntogged tog\ntogging tog\ntogs tog\ntold tell\ntongued tongue\ntongues tongue\ntonguing tongue\ntook take\ntook_a_side take_a_side\ntook_pains take_pains\ntook_steps take_steps\ntopped top\ntopping top\ntops top\ntore tear\ntorn tear\ntorrefied torrefy\ntorrefies torrefy\ntorrefying torrefy\ntorrify torrefy\ntotaled total\ntotaling total\ntotalled total\ntotalling total\ntotals total\ntots tot\ntotted tot\ntotting tot\ntoweled towel\ntoweling towel\ntowelled towel\ntowelling towel\ntowels towel\ntrafficked traffic\ntrafficking traffic\ntraffics traffic\ntraipsed traipse\ntraipses traipse\ntraipsing traipse\ntrameled trammel\ntrameling trammel\ntramelled trammel\ntramelling trammel\ntramels trammel\ntrammed tram\ntramming tram\ntrams tram\ntranquillized tranquillize\ntranquillizes tranquillize\ntranquillizing tranquillize\ntransferred transfer\ntransferring transfer\ntransfers transfer\ntransfixed transfix\ntransfixes transfix\ntransfixing transfix\ntransfixt transfix\ntranship transship\ntranshipped tranship\ntranshipping tranship\ntranships tranship\ntransmits transmit\ntransmitted transmit\ntransmitting transmit\ntransmogrified transmogrify\ntransmogrifies transmogrify\ntransmogrifying transmogrify\ntransshipped transship\ntransshipping transship\ntransships transship\ntransvalued transvalue\ntransvalues transvalue\ntransvaluing transvalue\ntrapanned trapan\ntrapanning trapan\ntrapans trapan\ntrapped trap\ntrapping trap\ntraps trap\ntraumatized traumatize\ntraumatizes traumatize\ntraumatizing traumatize\ntraveled travel\ntraveling travel\ntravelled travel\ntravelling travel\ntravels travel\ntravestied travesty\ntravesties travesty\ntravestying travesty\ntreading tread\ntreads tread\ntrekked trek\ntrekking trek\ntreks trek\ntrepanned trepan\ntrepanning trepan\ntrepans trepan\ntried try\ntries try\ntrigged trig\ntrigging trig\ntrigs trig\ntrimmed trim\ntrimming trim\ntrims trim\ntripped trip\ntripping trip\ntrips trip\ntrod tread\ntrodden tread\ntrogged trog\ntrogging trog\ntrogs trog\ntrots trot\ntrotted trot\ntrotting trot\ntroweled trowel\ntroweling trowel\ntrowelled trowel\ntrowelling trowel\ntrowels trowel\ntrued true\ntrues true\ntruing true\ntrying try\ntugged tug\ntugging tug\ntugs tug\ntumefied tumefy\ntumefies tumefy\ntumefying tumefy\ntunned tun\ntunneled tunnel\ntunneling tunnel\ntunnelled tunnel\ntunnelling tunnel\ntunnels tunnel\ntunning tun\ntuns tun\ntupped tup\ntupping tup\ntups tup\ntut-tuts tut-tut\ntut-tutted tut-tut\ntut-tutting tut-tut\ntwigged twig\ntwigging twig\ntwigs twig\ntwinned twin\ntwinning twin\ntwins twin\ntwits twit\ntwitted twit\ntwitting twit\ntying tie\ntypecasting typecast\ntypecasts typecast\ntypesets typeset\ntypesetting typeset\ntypewrites typewrite\ntypewriting typewrite\ntypewritten typewrite\ntypewrote typewrite\ntypified typify\ntypifies typify\ntypifying typify\nuglified uglify\nuglifies uglify\nuglifying uglify\nunbarred unbar\nunbarring unbar\nunbars unbar\nunbending unbend\nunbends unbend\nunbent unbend\nunbinding unbind\nunbinds unbind\nunbound unbind\nuncapped uncap\nuncapping uncap\nuncaps uncap\nunclad unclothe\nunclogged unclog\nunclogging unclog\nunclogs unclog\nunclothed unclothe\nunclothes unclothe\nunclothing unclothe\nunderbidding underbid\nunderbids underbid\nunderbought underbuy\nunderbuying underbuy\nunderbuys underbuy\nundercuts undercut\nundercutting undercut\nunderfed underfeed\nunderfeeding underfeed\nunderfeeds underfeed\nundergirded undergird\nundergirding undergird\nundergirds undergird\nundergirt undergird\nundergoes undergo\nundergoing undergo\nundergone undergo\nunderlaid underlay\nunderlain underlie\nunderlay underlie\nunderlaying underlay\nunderlays underlay\nunderlets underlet\nunderletting underlet\nunderlies underlie\nunderlying underlie\nunderpaid underpay\nunderpaying underpay\nunderpays underpay\nunderpinned underpin\nunderpinning underpin\nunderpins underpin\nunderpropped underprop\nunderpropping underprop\nunderprops underprop\nunderselling undersell\nundersells undersell\nundersets underset\nundersetting underset\nundershooting undershoot\nundershoots undershoot\nundershot undershoot\nundersold undersell\nunderstanding understand\nunderstands understand\nunderstood understand\nunderstudied understudy\nunderstudies understudy\nunderstudying understudy\nundertaken undertake\nundertakes undertake\nundertaking undertake\nundertook undertake\nundervalued undervalue\nundervalues undervalue\nundervaluing undervalue\nunderwent undergo\nunderwrites underwrite\nunderwriting underwrite\nunderwritten underwrite\nunderwrote underwrite\nundid undo\nundoes undo\nundoing undo\nundone undo\nunfits unfit\nunfitted unfit\nunfitting unfit\nunfreezes unfreeze\nunfreezing unfreeze\nunfroze unfreeze\nunfrozen unfreeze\nunified unify\nunifies unify\nunifying unify\nunkenneled unkennel\nunkenneling unkennel\nunkennelled unkennel\nunkennelling unkennel\nunkennels unkennel\nunknits unknit\nunknitted unknit\nunknitting unknit\nunlaid unlay\nunlaying unlay\nunlays unlay\nunlearned unlearn\nunlearning unlearn\nunlearns unlearn\nunlearnt unlearn\nunmade unmake\nunmakes unmake\nunmaking unmake\nunmanned unman\nunmanning unman\nunmans unman\nunpegged unpeg\nunpegging unpeg\nunpegs unpeg\nunpinned unpin\nunpinning unpin\nunpins unpin\nunplugged unplug\nunplugging unplug\nunplugs unplug\nunraveled unravel\nunraveling unravel\nunravelled unravel\nunravelling unravel\nunravels unravel\nunreeved unreeve\nunreeves unreeve\nunreeving unreeve\nunrigged unrig\nunrigging unrig\nunrigs unrig\nunripped unrip\nunripping unrip\nunrips unrip\nunrove unreeve\nunsaid unsay\nunsaying unsay\nunsays unsay\nunshipped unship\nunshipping unship\nunships unship\nunslinging unsling\nunslings unsling\nunslung unsling\nunsnapped unsnap\nunsnapping unsnap\nunsnaps unsnap\nunspeaking unspeak\nunspeaks unspeak\nunspoke unspeak\nunspoken unspeak\nunsteadied unsteady\nunsteadies unsteady\nunsteadying unsteady\nunstepped unstep\nunstepping unstep\nunsteps unstep\nunsticking unstick\nunsticks unstick\nunstopped unstop\nunstopping unstop\nunstops unstop\nunstringing unstring\nunstrings unstring\nunstrung unstring\nunstuck unstick\nunswearing unswear\nunswears unswear\nunswore unswear\nunsworn unswear\nuntaught unteach\nunteaches unteach\nunteaching unteach\nunthinking unthink\nunthinks unthink\nunthought unthink\nuntidied untidy\nuntidies untidy\nuntidying untidy\nuntied untie\nunties untie\nuntreading untread\nuntreads untread\nuntrod untread\nuntrodden untread\nuntying untie\nunwinding unwind\nunwinds unwind\nunwound unwind\nunwrapped unwrap\nunwrapping unwrap\nunwraps unwrap\nunzipped unzip\nunzipping unzip\nunzips unzip\nupbuilding upbuild\nupbuilds upbuild\nupbuilt upbuild\nupcasting upcast\nupcasts upcast\nupheaved upheave\nupheaves upheave\nupheaving upheave\nupheld uphold\nupholding uphold\nupholds uphold\nuphove upheave\nupped up\nuppercuts uppercut\nuppercutting uppercut\nupping up\nuprisen uprise\nuprises uprise\nuprising uprise\nuprose uprise\nups up\nupsets upset\nupsetting upset\nupsprang upspring\nupspringing upspring\nupsprings upspring\nupsprung upspring\nupsweeping upsweep\nupsweeps upsweep\nupswelled upswell\nupswelling upswell\nupswells upswell\nupswept upsweep\nupswinging upswing\nupswings upswing\nupswollen upswell\nupswung upswing\nvagged vag\nvagging vag\nvags vag\nvalued value\nvalues value\nvaluing value\nvaried vary\nvaries vary\nvarying vary\nvats vat\nvatted vat\nvatting vat\nverbified verbify\nverbifies verbify\nverbifying verbify\nverified verify\nverifies verify\nverifying verify\nversified versify\nversifies versify\nversifying versify\nvetoed veto\nvetoes veto\nvetoing veto\nvets vet\nvetted vet\nvetting vet\nvictualed victual\nvictualing victual\nvictualled victual\nvictualling victual\nvictuals victual\nvied vie\nvies vie\nvilified vilify\nvilifies vilify\nvilifying vilify\nvisaed visa\nvisaing visa\nvisas visa\nvitrified vitrify\nvitrifies vitrify\nvitrifying vitrify\nvitrioled vitriol\nvitrioling vitriol\nvitriolled vitriol\nvitriolling vitriol\nvitriols vitriol\nvivaed viva\nvivaing viva\nvivas viva\nvivified vivify\nvivifies vivify\nvivifying vivify\nvoodooed voodoo\nvoodooing voodoo\nvoodoos voodoo\nvying vie\nwadded wad\nwaddied waddy\nwaddies waddy\nwadding wad\nwaddying waddy\nwads wad\nwadsets wadset\nwadsetted wadset\nwadsetting wadset\nwagged wag\nwagging wag\nwags wag\nwakes wake\nwaking wake\nwanned wan\nwanning wan\nwans wan\nwarred war\nwarring war\nwars war\nwas be\nwater-ski'd water-ski\nwater-skied water-ski\nwater-skiing water-ski\nwater-skis water-ski\nwaylaid waylay\nwaylaying waylay\nwaylays waylay\nwearied weary\nwearies weary\nwearing wear\nwears wear\nwearying weary\nweatherstripped weatherstrip\nweatherstripping weatherstrip\nweaved weave\nweaves weave\nweaving weave\nwebbed web\nwebbing web\nwebs web\nwedded wed\nwedding wed\nweds wed\nweeping weep\nweeps weep\nwent go\nwent_deep go_deep\nwept weep\nwere be\nwets wet\nwetted wet\nwetting wet\nwhammed wham\nwhamming wham\nwhams wham\nwhapped whap\nwhapping whap\nwhaps whap\nwhets whet\nwhetted whet\nwhetting whet\nwhinnied whinny\nwhinnies whinny\nwhinnying whinny\nwhipped whip\nwhipping whip\nwhips whip\nwhipsawed whipsaw\nwhipsawing whipsaw\nwhipsawn whipsaw\nwhipsaws whipsaw\nwhirred whir\nwhirring whir\nwhirs whir\nwhistle-stopped whistle-stop\nwhistle-stopping whistle-stop\nwhistle-stops whistle-stop\nwhizzed whiz\nwhizzes whiz\nwhizzing whiz\nwhopped whop\nwhopping whop\nwhops whop\nwigged wig\nwigging wig\nwigs wig\nwigwagged wigwag\nwigwagging wigwag\nwigwags wigwag\nwildcats wildcat\nwildcatted wildcat\nwildcatting wildcat\nwinded wind\nwinding wind\nwindow-shopped window-shop\nwindow-shopping window-shop\nwindow-shops window-shop\nwinds wind\nwinning win\nwins win\nwinterfed winterfeed\nwinterfeeding winterfeed\nwinterfeeds winterfeed\nwiredrawing wiredraw\nwiredrawn wiredraw\nwiredraws wiredraw\nwiredrew wiredraw\nwithdrawing withdraw\nwithdrawn withdraw\nwithdraws withdraw\nwithdrew withdraw\nwithheld withhold\nwithholding withhold\nwithholds withhold\nwithstanding withstand\nwithstands withstand\nwithstood withstand\nwoke wake\nwoken wake\nwon win\nwonned won\nwonning won\nwons won\nwooed woo\nwooing woo\nwoos woo\nwore wear\nworn wear\nworried worry\nworries worry\nworrying worry\nworshipped worship\nworshipping worship\nworships worship\nwound wind\nwove weave\nwoven weave\nwrapped wrap\nwrapping wrap\nwraps wrap\nwried wry\nwries wry\nwringing wring\nwrings wring\nwrites write\nwriting write\nwritten write\nwrote write\nwrought work\nwrung wring\nwrying wry\nyakked yak\nyakking yak\nyaks yak\nyapped yap\nyapping yap\nyaps yap\nycleped clepe\nyclept clepe\nyenned yen\nyenning yen\nyens yen\nyodeled yodel\nyodeling yodel\nyodelled yodel\nyodelling yodel\nyodels yodel\nzapped zap\nzapping zap\nzaps zap\nzeroed zero\nzeroes zero\nzeroing zero\nzigzagged zigzag\nzigzagging zigzag\nzigzags zigzag\nzipped zip\nzipping zip\nzips zip\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-2.0-Exceptions/adj.exc",
    "content": "acer acer\nafter after\nairier airy\nairiest airy\nall-arounder all-arounder\nangrier angry\nangriest angry\narcher archer\nartier arty\nartiest arty\nashier ashy\nashiest ashy\nassaulter assaulter\nattacker attacker\nbacker backer\nbaggier baggy\nbaggiest baggy\nbalkier balky\nbalkiest balky\nbalmier balmy\nbalmiest balmy\nbandier bandy\nbandiest bandy\nbargainer bargainer\nbarmier barmy\nbarmiest barmy\nbattier batty\nbattiest batty\nbaulkier baulky\nbaulkiest baulky\nbawdier bawdy\nbawdiest bawdy\nbayer bayer\nbeadier beady\nbeadiest beady\nbeastlier beastly\nbeastliest beastly\nbeater beater\nbeefier beefy\nbeefiest beefy\nbeerier beery\nbeeriest beery\nbendier bendy\nbendiest bendy\nbest good\nbetter good well\nbigger big\nbiggest big\nbitchier bitchy\nbitchiest bitchy\nbiter biter\nbittier bitty\nbittiest bitty\nblearier bleary\nbleariest bleary\nbloodier bloody\nbloodiest bloody\nbloodthirstier bloodthirsty\nbloodthirstiest bloodthirsty\nblowier blowy\nblowiest blowy\nblowsier blowsy\nblowsiest blowsy\nblowzier blowzy\nblowziest blowzy\nbluer blue\nbluest blue\nboner boner\nbonier bony\nboniest bony\nbonnier bonny\nbonniest bonny\nboozier boozy\nbooziest boozy\nboskier bosky\nboskiest bosky\nbossier bossy\nbossiest bossy\nbotchier botchy\nbotchiest botchy\nbother bother\nbouncier bouncy\nbounciest bouncy\nbounder bounder\nbower bower\nbrainier brainy\nbrainiest brainy\nbrashier brashy\nbrashiest brashy\nbrassier brassy\nbrassiest brassy\nbrawnier brawny\nbrawniest brawny\nbreathier breathy\nbreathiest breathy\nbreezier breezy\nbreeziest breezy\nbrinier briny\nbriniest briny\nbritisher britisher\nbroadcaster broadcaster\nbrooder brooder\nbroodier broody\nbroodiest broody\nbubblier bubbly\nbubbliest bubbly\nbuggier buggy\nbuggiest buggy\nbulkier bulky\nbulkiest bulky\nbumpier bumpy\nbumpiest bumpy\nbunchier bunchy\nbunchiest bunchy\nburlier burly\nburliest burly\nburrier burry\nburriest burry\nburster burster\nbushier bushy\nbushiest bushy\nbusier busy\nbusiest busy\nbuster buster\nbustier busty\nbustiest busty\ncagier cagey\ncagiest cagey\ncamper camper\ncannier canny\ncanniest canny\ncanter canter\ncantier canty\ncantiest canty\ncaster caster\ncatchier catchy\ncatchiest catchy\ncattier catty\ncattiest catty\ncer cer\nchancier chancy\nchanciest chancy\ncharier chary\nchariest chary\nchattier chatty\nchattiest chatty\ncheekier cheeky\ncheekiest cheeky\ncheerier cheery\ncheeriest cheery\ncheesier cheesy\ncheesiest cheesy\nchestier chesty\nchestiest chesty\nchewier chewy\nchewiest chewy\nchillier chilly\nchilliest chilly\nchintzier chintzy\nchintziest chintzy\nchippier chippy\nchippiest chippy\nchoosier choosy\nchoosiest choosy\nchoppier choppy\nchoppiest choppy\nchubbier chubby\nchubbiest chubby\nchuffier chuffy\nchuffiest chuffy\nchummier chummy\nchummiest chummy\nchunkier chunky\nchunkiest chunky\nchurchier churchy\nchurchiest churchy\nclammier clammy\nclammiest clammy\nclassier classy\nclassiest classy\ncleanlier cleanly\ncleanliest cleanly\nclerklier clerkly\nclerkliest clerkly\ncloudier cloudy\ncloudiest cloudy\nclubbier clubby\nclubbiest clubby\nclumsier clumsy\nclumsiest clumsy\ncockier cocky\ncockiest cocky\ncoder coder\ncollier colly\ncolliest colly\ncomelier comely\ncomeliest comely\ncomfier comfy\ncomfiest comfy\ncornier corny\ncorniest corny\ncosier cosy\ncosiest cosy\ncostlier costly\ncostliest costly\ncostumer costumer\ncounterfeiter counterfeiter\ncourtlier courtly\ncourtliest courtly\ncozier cozy\ncoziest cozy\ncrabbier crabby\ncrabbiest crabby\ncracker cracker\ncraftier crafty\ncraftiest crafty\ncraggier craggy\ncraggiest craggy\ncrankier cranky\ncrankiest cranky\ncrasher crasher\ncrawlier crawly\ncrawliest crawly\ncrazier crazy\ncraziest crazy\ncreamer creamer\ncreamier creamy\ncreamiest creamy\ncreepier creepy\ncreepiest creepy\ncrispier crispy\ncrispiest crispy\ncrumbier crumby\ncrumbiest crumby\ncrumblier crumbly\ncrumbliest crumbly\ncrummier crummy\ncrummiest crummy\ncrustier crusty\ncrustiest crusty\ncurlier curly\ncurliest curly\ncustomer customer\ncuter cute\ndaffier daffy\ndaffiest daffy\ndaintier dainty\ndaintiest dainty\ndandier dandy\ndandiest dandy\ndeadlier deadly\ndeadliest deadly\ndealer dealer\ndeserter deserter\ndewier dewy\ndewiest dewy\ndicier dicey\ndiciest dicey\ndimer dimer\ndimmer dim\ndimmest dim\ndingier dingy\ndingiest dingy\ndinkier dinky\ndinkiest dinky\ndippier dippy\ndippiest dippy\ndirtier dirty\ndirtiest dirty\ndishier dishy\ndishiest dishy\ndizzier dizzy\ndizziest dizzy\ndodgier dodgy\ndodgiest dodgy\ndopier dopey\ndopiest dopey\ndottier dotty\ndottiest dotty\ndoughier doughy\ndoughiest doughy\ndoughtier doughty\ndoughtiest doughty\ndowdier dowdy\ndowdiest dowdy\ndowier dowie dowy\ndowiest dowie dowy\ndowner downer\ndownier downy\ndowniest downy\ndozier dozy\ndoziest dozy\ndrabber drab\ndrabbest drab\ndraftier drafty\ndraftiest drafty\ndraggier draggy\ndraggiest draggy\ndraughtier draughty\ndraughtiest draughty\ndreamier dreamy\ndreamiest dreamy\ndrearier dreary\ndreariest dreary\ndreggier dreggy\ndreggiest dreggy\ndresser dresser\ndressier dressy\ndressiest dressy\ndrier dry\ndriest dry\ndrippier drippy\ndrippiest drippy\ndrowsier drowsy\ndrowsiest drowsy\ndryer dry\ndryest dry\ndumpier dumpy\ndumpiest dumpy\ndunner dun\ndunnest dun\nduskier dusky\nduskiest dusky\ndustier dusty\ndustiest dusty\nearlier early\nearliest early\nearthier earthy\nearthiest earthy\nearthlier earthly\nearthliest earthly\neasier easy\neasiest easy\neaster easter\neastsider eastsider\nedger edger\nedgier edgy\nedgiest edgy\neerier eerie\neeriest eerie\nemptier empty\nemptiest empty\nfaker faker\nfancier fancy\nfanciest fancy\nfatter fat\nfattest fat\nfattier fatty\nfattiest fatty\nfaultier faulty\nfaultiest faulty\nfeistier feisty\nfeistiest feisty\nfeller feller\nfiddlier fiddly\nfiddliest fiddly\nfilmier filmy\nfilmiest filmy\nfilthier filthy\nfilthiest filthy\nfinnier finny\nfinniest finny\nfirst-rater first-rater\nfirst-stringer first-stringer\nfishier fishy\nfishiest fishy\nfitter fit\nfittest fit\nflabbier flabby\nflabbiest flabby\nflaggier flaggy\nflaggiest flaggy\nflakier flaky\nflakiest flaky\nflasher flasher\nflashier flashy\nflashiest flashy\nflatter flat\nflattest flat\nflauntier flaunty\nflauntiest flaunty\nfledgier fledgy\nfledgiest fledgy\nfleecier fleecy\nfleeciest fleecy\nfleshier fleshy\nfleshiest fleshy\nfleshlier fleshly\nfleshliest fleshly\nflightier flighty\nflightiest flighty\nflimsier flimsy\nflimsiest flimsy\nflintier flinty\nflintiest flinty\nfloatier floaty\nfloatiest floaty\nfloppier floppy\nfloppiest floppy\nflossier flossy\nflossiest flossy\nfluffier fluffy\nfluffiest fluffy\nflukier fluky\nflukiest fluky\nfoamier foamy\nfoamiest foamy\nfoggier foggy\nfoggiest foggy\nfolder folder\nfolksier folksy\nfolksiest folksy\nfoolhardier foolhardy\nfoolhardiest foolhardy\nfore-and-after fore-and-after\nforeigner foreigner\nforest forest\nfounder founder\nfoxier foxy\nfoxiest foxy\nfratchier fratchy\nfratchiest fratchy\nfreakier freaky\nfreakiest freaky\nfreer free\nfreest free\nfrenchier frenchy\nfrenchiest frenchy\nfriendlier friendly\nfriendliest friendly\nfriskier frisky\nfriskiest frisky\nfrizzier frizzy\nfrizziest frizzy\nfrizzlier frizzly\nfrizzliest frizzly\nfrostier frosty\nfrostiest frosty\nfrouzier frouzy\nfrouziest frouzy\nfrowsier frowsy\nfrowsiest frowsy\nfrowzier frowzy\nfrowziest frowzy\nfruitier fruity\nfruitiest fruity\nfunkier funky\nfunkiest funky\nfunnier funny\nfunniest funny\nfurrier furry\nfurriest furry\nfussier fussy\nfussiest fussy\nfustier fusty\nfustiest fusty\nfuzzier fuzzy\nfuzziest fuzzy\ngabbier gabby\ngabbiest gabby\ngamier gamy\ngamiest gamy\ngammier gammy\ngammiest gammy\ngassier gassy\ngassiest gassy\ngaudier gaudy\ngaudiest gaudy\ngauzier gauzy\ngauziest gauzy\ngawkier gawky\ngawkiest gawky\nghastlier ghastly\nghastliest ghastly\nghostlier ghostly\nghostliest ghostly\ngiddier giddy\ngiddiest giddy\ngladder glad\ngladdest glad\nglassier glassy\nglassiest glassy\nglibber glib\nglibbest glib\ngloomier gloomy\ngloomiest gloomy\nglossier glossy\nglossiest glossy\nglummer glum\nglummest glum\ngodlier godly\ngodliest godly\ngoer goer\ngoner goner\ngoodlier goodly\ngoodliest goodly\ngoofier goofy\ngoofiest goofy\ngooier gooey\ngooiest gooey\ngoosier goosy\ngoosiest goosy\ngorier gory\ngoriest gory\ngradelier gradely\ngradeliest gradely\ngrader grader\ngrainier grainy\ngrainiest grainy\ngrassier grassy\ngrassiest grassy\ngreasier greasy\ngreasiest greasy\ngreedier greedy\ngreediest greedy\ngrimmer grim\ngrimmest grim\ngrislier grisly\ngrisliest grisly\ngrittier gritty\ngrittiest gritty\ngrizzlier grizzly\ngrizzliest grizzly\ngroggier groggy\ngroggiest groggy\ngroovier groovy\ngrooviest groovy\ngrottier grotty\ngrottiest grotty\ngrounder grounder\ngrouper grouper\ngroutier grouty\ngroutiest grouty\ngrubbier grubby\ngrubbiest grubby\ngrumpier grumpy\ngrumpiest grumpy\nguest guest\nguiltier guilty\nguiltiest guilty\ngummier gummy\ngummiest gummy\ngushier gushy\ngushiest gushy\ngustier gusty\ngustiest gusty\ngutsier gutsy\ngutsiest gutsy\nhairier hairy\nhairiest hairy\nhalfways halfway\nhalter halter\nhammier hammy\nhammiest hammy\nhandier handy\nhandiest handy\nhappier happy\nhappiest happy\nhardier hardy\nhardiest hardy\nhastier hasty\nhastiest hasty\nhaughtier haughty\nhaughtiest haughty\nhazier hazy\nhaziest hazy\nheader header\nheadier heady\nheadiest heady\nhealthier healthy\nhealthiest healthy\nheartier hearty\nheartiest hearty\nheavier heavy\nheaviest heavy\nheftier hefty\nheftiest hefty\nhepper hep\nheppest hep\nherbier herby\nherbiest herby\nhinder hind\nhipper hip\nhippest hip\nhippier hippy\nhippiest hippy\nhoarier hoary\nhoariest hoary\nholier holy\nholiest holy\nhomelier homely\nhomeliest homely\nhomer homer\nhomier homey\nhomiest homey\nhornier horny\nhorniest horny\nhorsier horsy\nhorsiest horsy\nhotter hot\nhottest hot\nhumpier humpy\nhumpiest humpy\nhunger hunger\nhungrier hungry\nhungriest hungry\nhuskier husky\nhuskiest husky\nicier icy\niciest icy\ninkier inky\ninkiest inky\ninsider insider\ninterest interest\njaggier jaggy\njaggiest jaggy\njammier jammy\njammiest jammy\njauntier jaunty\njauntiest jaunty\njazzier jazzy\njazziest jazzy\njerkier jerky\njerkiest jerky\njointer jointer\njollier jolly\njolliest jolly\njuicier juicy\njuiciest juicy\njumpier jumpy\njumpiest jumpy\nkindlier kindly\nkindliest kindly\nkinkier kinky\nkinkiest kinky\nknottier knotty\nknottiest knotty\nknurlier knurly\nknurliest knurly\nkookier kooky\nkookiest kooky\nlacier lacy\nlaciest lacy\nlairier lairy\nlairiest lairy\nlakier laky\nlakiest laky\nlander lander\nlankier lanky\nlankiest lanky\nlathier lathy\nlathiest lathy\nlayer layer\nlazier lazy\nlaziest lazy\nleafier leafy\nleafiest leafy\nleakier leaky\nleakiest leaky\nlearier leary\nleariest leary\nleer leer\nleerier leery\nleeriest leery\nleft-hander left-hander\nleft-winger left-winger\nleggier leggy\nleggiest leggy\nlengthier lengthy\nlengthiest lengthy\nler ler\nleveler leveler\nlimier limy\nlimiest limy\nlippier lippy\nlippiest lippy\nliter liter\nlivelier lively\nliveliest lively\nliver liver\nloather loather\nloftier lofty\nloftiest lofty\nlogier logy\nlogiest logy\nlonelier lonely\nloneliest lonely\nloner loner\nloonier loony\nlooniest loony\nloopier loopy\nloopiest loopy\nlordlier lordly\nlordliest lordly\nlousier lousy\nlousiest lousy\nlovelier lovely\nloveliest lovely\nlowlander lowlander\nlowlier lowly\nlowliest lowly\nluckier lucky\nluckiest lucky\nlumpier lumpy\nlumpiest lumpy\nlunier luny\nluniest luny\nlustier lusty\nlustiest lusty\nmadder mad\nmaddest mad\nmainer mainer\nmaligner maligner\nmaltier malty\nmaltiest malty\nmangier mangy\nmangiest mangy\nmankier manky\nmankiest manky\nmanlier manly\nmanliest manly\nmariner mariner\nmarshier marshy\nmarshiest marshy\nmassier massy\nmassiest massy\nmatter matter\nmaungier maungy\nmaungiest maungy\nmazier mazy\nmaziest mazy\nmealier mealy\nmealiest mealy\nmeaslier measly\nmeasliest measly\nmeatier meaty\nmeatiest meaty\nmeeter meeter\nmerrier merry\nmerriest merry\nmessier messy\nmessiest messy\nmiffier miffy\nmiffiest miffy\nmightier mighty\nmightiest mighty\nmilcher milcher\nmilker milker\nmilkier milky\nmilkiest milky\nmingier mingy\nmingiest mingy\nminter minter\nmirkier mirky\nmirkiest mirky\nmiser miser\nmistier misty\nmistiest misty\nmocker mocker\nmodeler modeler\nmodest modest\nmoldier moldy\nmoldiest moldy\nmoodier moody\nmoodiest moody\nmoonier moony\nmooniest moony\nmothier mothy\nmothiest mothy\nmouldier mouldy\nmouldiest mouldy\nmousier mousy\nmousiest mousy\nmouthier mouthy\nmouthiest mouthy\nmuckier mucky\nmuckiest mucky\nmuddier muddy\nmuddiest muddy\nmuggier muggy\nmuggiest muggy\nmultiplexer multiplexer\nmurkier murky\nmurkiest murky\nmushier mushy\nmushiest mushy\nmuskier musky\nmuskiest musky\nmuster muster\nmustier musty\nmustiest musty\nmuzzier muzzy\nmuzziest muzzy\nnappier nappy\nnappiest nappy\nnastier nasty\nnastiest nasty\nnattier natty\nnattiest natty\nnaughtier naughty\nnaughtiest naughty\nneedier needy\nneediest needy\nnervier nervy\nnerviest nervy\nnewsier newsy\nnewsiest newsy\nniftier nifty\nniftiest nifty\nnippier nippy\nnippiest nippy\nnittier nitty\nnittiest nitty\nnoisier noisy\nnoisiest noisy\nnortheasterner northeasterner\nnorther norther\nnortherner northerner\nnosier nosy\nnosiest nosy\nnumber number\nnuttier nutty\nnuttiest nutty\noffer off\noffer offer\noilier oily\noiliest oily\nold-timer old-timer\noliver oliver\noozier oozy\nooziest oozy\nopener opener\noutsider outsider\novercomer overcomer\novernighter overnighter\nowner owner\npallier pally\npalliest pally\npalmier palmy\npalmiest palmy\npaltrier paltry\npaltriest paltry\npappier pappy\npappiest pappy\nparkier parky\nparkiest parky\npart-timer part-timer\npasser passer\npaster paster\npastier pasty\npastiest pasty\npatchier patchy\npatchiest patchy\npater pater\npawkier pawky\npawkiest pawky\npeachier peachy\npeachiest peachy\npearler pearler\npearlier pearly\npearliest pearly\npedaler pedaler\npeppier peppy\npeppiest peppy\nperkier perky\nperkiest perky\npeskier pesky\npeskiest pesky\npeter peter\npettier petty\npettiest petty\nphonier phony\nphoniest phony\npickier picky\npickiest picky\npiggier piggy\npiggiest piggy\npinier piny\npiniest piny\npitchier pitchy\npitchiest pitchy\npithier pithy\npithiest pithy\nplaner planer\nplashier plashy\nplashiest plashy\nplatier platy\nplatiest platy\nplayer player\npluckier plucky\npluckiest plucky\nplumber plumber\nplumier plumy\nplumiest plumy\nplummier plummy\nplummiest plummy\npodgier podgy\npodgiest podgy\npokier poky\npokiest poky\npolisher polisher\nporkier porky\nporkiest porky\nporter porter\nportlier portly\nportliest portly\nposter poster\npottier potty\npottiest potty\npreachier preachy\npreachiest preachy\npresenter presenter\npretender pretender\nprettier pretty\nprettiest pretty\npricier pricy\npriciest pricy\npricklier prickly\nprickliest prickly\npriestlier priestly\npriestliest priestly\nprimer primer\nprimmer prim\nprimmest prim\nprincelier princely\nprinceliest princely\nprinter printer\nprissier prissy\nprissiest prissy\nprivateer privateer\nprivier privy\npriviest privy\nprompter prompter\nprosier prosy\nprosiest prosy\npudgier pudgy\npudgiest pudgy\npuffer puffer\npuffier puffy\npuffiest puffy\npulpier pulpy\npulpiest pulpy\npunchier punchy\npunchiest punchy\npunier puny\npuniest puny\npushier pushy\npushiest pushy\npussier pussy\npussiest pussy\nquaggier quaggy\nquaggiest quaggy\nquakier quaky\nquakiest quaky\nqueasier queasy\nqueasiest queasy\nqueenlier queenly\nqueenliest queenly\nracier racy\nraciest racy\nrainier rainy\nrainiest rainy\nrandier randy\nrandiest randy\nrangier rangy\nrangiest rangy\nranker ranker\nrattier ratty\nrattiest ratty\nrattlier rattly\nrattliest rattly\nraunchier raunchy\nraunchiest raunchy\nreadier ready\nreadiest ready\nrecorder recorder\nredder red\nreddest red\nreedier reedy\nreediest reedy\nrenter renter\nretailer retailer\nright-hander right-hander\nright-winger right-winger\nrimier rimy\nrimiest rimy\nriskier risky\nriskiest risky\nritzier ritzy\nritziest ritzy\nroaster roaster\nrockier rocky\nrockiest rocky\nroilier roily\nroiliest roily\nrookier rooky\nrookiest rooky\nroomier roomy\nroomiest roomy\nropier ropy\nropiest ropy\nrosier rosy\nrosiest rosy\nrowdier rowdy\nrowdiest rowdy\nruddier ruddy\nruddiest ruddy\nrunnier runny\nrunniest runny\nrusher rusher\nrushier rushy\nrushiest rushy\nrustier rusty\nrustiest rusty\nruttier rutty\nruttiest rutty\nsadder sad\nsaddest sad\nsalter salter\nsaltier salty\nsaltiest salty\nsampler sampler\nsandier sandy\nsandiest sandy\nsappier sappy\nsappiest sappy\nsassier sassy\nsassiest sassy\nsaucier saucy\nsauciest saucy\nsavvier savvy\nsavviest savvy\nscabbier scabby\nscabbiest scabby\nscalier scaly\nscaliest scaly\nscantier scanty\nscantiest scanty\nscarier scary\nscariest scary\nscraggier scraggy\nscraggiest scraggy\nscragglier scraggly\nscraggliest scraggly\nscraper scraper\nscrappier scrappy\nscrappiest scrappy\nscrawnier scrawny\nscrawniest scrawny\nscrewier screwy\nscrewiest screwy\nscrubbier scrubby\nscrubbiest scrubby\nscruffier scruffy\nscruffiest scruffy\nscungier scungy\nscungiest scungy\nscurvier scurvy\nscurviest scurvy\nseamier seamy\nseamiest seamy\nsecond-rater second-rater\nseconder seconder\nseedier seedy\nseediest seedy\nseemlier seemly\nseemliest seemly\nserer serer\nsexier sexy\nsexiest sexy\nshabbier shabby\nshabbiest shabby\nshadier shady\nshadiest shady\nshaggier shaggy\nshaggiest shaggy\nshakier shaky\nshakiest shaky\nshapelier shapely\nshapeliest shapely\nshier shy\nshiest shy\nshiftier shifty\nshiftiest shifty\nshinier shiny\nshiniest shiny\nshirtier shirty\nshirtiest shirty\nshoddier shoddy\nshoddiest shoddy\nshowier showy\nshowiest showy\nshrubbier shrubby\nshrubbiest shrubby\nshyer shy\nshyest shy\nsicklier sickly\nsickliest sickly\nsightlier sightly\nsightliest sightly\nsignaler signaler\nsigner signer\nsilkier silky\nsilkiest silky\nsillier silly\nsilliest silly\nsketchier sketchy\nsketchiest sketchy\nskewer skewer\nskimpier skimpy\nskimpiest skimpy\nskinnier skinny\nskinniest skinny\nslaphappier slaphappy\nslaphappiest slaphappy\nslatier slaty\nslatiest slaty\nslaver slaver\nsleazier sleazy\nsleaziest sleazy\nsleepier sleepy\nsleepiest sleepy\nslier sly\nsliest sly\nslimier slimy\nslimiest slimy\nslimmer slim\nslimmest slim\nslimsier slimsy\nslimsiest slimsy\nslinkier slinky\nslinkiest slinky\nslippier slippy\nslippiest slippy\nsloppier sloppy\nsloppiest sloppy\nslyer sly\nslyest sly\nsmarmier smarmy\nsmarmiest smarmy\nsmellier smelly\nsmelliest smelly\nsmokier smoky\nsmokiest smoky\nsmugger smug\nsmuggest smug\nsnakier snaky\nsnakiest snaky\nsnappier snappy\nsnappiest snappy\nsnatchier snatchy\nsnatchiest snatchy\nsnazzier snazzy\nsnazziest snazzy\nsneaker sneaker\nsniffier sniffy\nsniffiest sniffy\nsnootier snooty\nsnootiest snooty\nsnottier snotty\nsnottiest snotty\nsnowier snowy\nsnowiest snowy\nsnuffer snuffer\nsnuffier snuffy\nsnuffiest snuffy\nsnugger snug\nsnuggest snug\nsoapier soapy\nsoapiest soapy\nsoggier soggy\nsoggiest soggy\nsolder solder\nsonsier sonsy\nsonsiest sonsy\nsootier sooty\nsootiest sooty\nsoppier soppy\nsoppiest soppy\nsorrier sorry\nsorriest sorry\nsoupier soupy\nsoupiest soupy\nsouther souther\nsoutherner southerner\nspeedier speedy\nspeediest speedy\nspicier spicy\nspiciest spicy\nspiffier spiffy\nspiffiest spiffy\nspikier spiky\nspikiest spiky\nspindlier spindly\nspindliest spindly\nspinier spiny\nspiniest spiny\nsplashier splashy\nsplashiest splashy\nspongier spongy\nspongiest spongy\nspookier spooky\nspookiest spooky\nspoonier spoony\nspooniest spoony\nsportier sporty\nsportiest sporty\nspottier spotty\nspottiest spotty\nspreader spreader\nsprier spry\nspriest spry\nsprightlier sprightly\nsprightliest sprightly\nspringer springer\nspringier springy\nspringiest springy\nsquashier squashy\nsquashiest squashy\nsquatter squat\nsquattest squat\nsquattier squatty\nsquattiest squatty\nsquiffier squiffy\nsquiffiest squiffy\nstagier stagy\nstagiest stagy\nstalkier stalky\nstalkiest stalky\nstapler stapler\nstarchier starchy\nstarchiest starchy\nstarer starer\nstarest starest\nstarrier starry\nstarriest starry\nstatelier stately\nstateliest stately\nsteadier steady\nsteadiest steady\nstealthier stealthy\nstealthiest stealthy\nsteamier steamy\nsteamiest steamy\nstingier stingy\nstingiest stingy\nstiper striper\nstocker stocker\nstockier stocky\nstockiest stocky\nstodgier stodgy\nstodgiest stodgy\nstonier stony\nstoniest stony\nstormier stormy\nstormiest stormy\nstreakier streaky\nstreakiest streaky\nstreamier streamy\nstreamiest streamy\nstretcher stretcher\nstretchier stretchy\nstretchiest stretchy\nstringier stringy\nstringiest stringy\nstripier stripy\nstripiest stripy\nstronger strong\nstrongest strong\nstroppier stroppy\nstroppiest stroppy\nstuffier stuffy\nstuffiest stuffy\nstumpier stumpy\nstumpiest stumpy\nsturdier sturdy\nsturdiest sturdy\nsubmariner submariner\nsulkier sulky\nsulkiest sulky\nsultrier sultry\nsultriest sultry\nsunnier sunny\nsunniest sunny\nsurlier surly\nsurliest surly\nswagger swagger\nswankier swanky\nswankiest swanky\nswarthier swarthy\nswarthiest swarthy\nsweatier sweaty\nsweatiest sweaty\ntackier tacky\ntackiest tacky\ntalkier talky\ntalkiest talky\ntangier tangy\ntangiest tangy\ntanner tan\ntannest tan\ntardier tardy\ntardiest tardy\ntastier tasty\ntastiest tasty\ntattier tatty\ntattiest tatty\ntawdrier tawdry\ntawdriest tawdry\ntechier techy\ntechiest techy\nteenager teenager\nteenier teeny\nteeniest teeny\nteetotaler teetotaler\ntester tester\ntestier testy\ntestiest testy\ntetchier tetchy\ntetchiest tetchy\nthinner thin\nthinnest thin\nthird-rater third-rater\nthirstier thirsty\nthirstiest thirsty\nthornier thorny\nthorniest thorny\nthreadier thready\nthreadiest thready\nthriftier thrifty\nthriftiest thrifty\nthroatier throaty\nthroatiest throaty\ntidier tidy\ntidiest tidy\ntimelier timely\ntimeliest timely\ntinier tiny\ntiniest tiny\ntinnier tinny\ntinniest tinny\ntipsier tipsy\ntipsiest tipsy\ntonier tony\ntoniest tony\ntoothier toothy\ntoothiest toothy\ntoper toper\ntouchier touchy\ntouchiest touchy\ntrader trader\ntrashier trashy\ntrashiest trashy\ntrendier trendy\ntrendiest trendy\ntrickier tricky\ntrickiest tricky\ntricksier tricksy\ntricksiest tricksy\ntrimer trimer\ntrimmer trim\ntrimmest trim\ntruer true\ntruest true\ntrustier trusty\ntrustiest trusty\ntubbier tubby\ntubbiest tubby\nturfier turfy\nturfiest turfy\ntweedier tweedy\ntweediest tweedy\ntwiggier twiggy\ntwiggiest twiggy\nuglier ugly\nugliest ugly\nunfriendlier unfriendly\nunfriendliest unfriendly\nungainlier ungainly\nungainliest ungainly\nungodlier ungodly\nungodliest ungodly\nunhappier unhappy\nunhappiest unhappy\nunhealthier unhealthy\nunhealthiest unhealthy\nunholier unholy\nunholiest unholy\nunrulier unruly\nunruliest unruly\nuntidier untidy\nuntidiest untidy\nvastier vasty\nvastiest vasty\nvest vest\nviewier viewy\nviewiest viewy\nwackier wacky\nwackiest wacky\nwanner wan\nwannest wan\nwarier wary\nwariest wary\nwashier washy\nwashiest washy\nwaster waster\nwavier wavy\nwaviest wavy\nwaxier waxy\nwaxiest waxy\nweaklier weakly\nweakliest weakly\nwealthier wealthy\nwealthiest wealthy\nwearier weary\nweariest weary\nwebbier webby\nwebbiest webby\nweedier weedy\nweediest weedy\nweenier weeny\nweeniest weeny\nweensier weensy\nweensiest weensy\nweepier weepy\nweepiest weepy\nweightier weighty\nweightiest weighty\nwelsher welsher\nwetter wet\nwettest wet\nwhackier whacky\nwhackiest whacky\nwhimsier whimsy\nwhimsiest whimsy\nwholesaler wholesaler\nwieldier wieldy\nwieldiest wieldy\nwilier wily\nwiliest wily\nwindier windy\nwindiest windy\nwinier winy\nwiniest winy\nwinterier wintery\nwinteriest wintery\nwintrier wintry\nwintriest wintry\nwirier wiry\nwiriest wiry\nwispier wispy\nwispiest wispy\nwittier witty\nwittiest witty\nwonkier wonky\nwonkiest wonky\nwoodier woody\nwoodiest woody\nwoodsier woodsy\nwoodsiest woodsy\nwoollier woolly\nwoolliest woolly\nwoozier woozy\nwooziest woozy\nwordier wordy\nwordiest wordy\nworldlier worldly\nworldliest worldly\nwormier wormy\nwormiest wormy\nworse bad\nworst bad\nworthier worthy\nworthiest worthy\nwrier wry\nwriest wry\nwryer wry\nwryest wry\nyarer yare\nyarest yare\nyeastier yeasty\nyeastiest yeasty\nyounger young\nyoungest young\nyummier yummy\nyummiest yummy\nzanier zany\nzaniest zany\nzippier zippy\nzippiest zippy\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-2.0-Exceptions/adv.exc",
    "content": "best well\nbetter well\ndeeper deeply\nfarther far\nfurther far\nharder hard\nhardest hard\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-2.0-Exceptions/buildExeptionDB.pl",
    "content": "#!/usr/bin/perl -w\nuse DB_File;\n@ARGV!=3&&die \"Usage: buildExceptionDB.pl WordNet-exception-file-directory exception-file-extension output-file\\n\";\nopendir(DIR,$ARGV[0])||die \"Cannot open directory $ARGV[0]\\n\";\ntie %exceptiondb,'DB_File',\"$ARGV[2]\",O_CREAT|O_RDWR,0640,$DB_HASH or\n    die \"Cannot open exception db file for output: $ARGV[2]\\n\";\nwhile(defined($file=readdir(DIR))) {\n    if($file=~/\\.$ARGV[1]$/o) {\n\tprint $file,\"\\n\";\n\topen(IN,\"$file\")||die \"Cannot open exception file: $file\\n\";\n\twhile(defined($line=<IN>)) {\n\t    chomp($line);\n\t    @tmp=split(/\\s+/,$line);\n\t    $exceptiondb{$tmp[0]}=$tmp[1];\n\t    print $tmp[0],\"\\n\";\n\t}\n\tclose(IN);\n    }\n}\nuntie %exceptiondb;\n\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-2.0-Exceptions/noun.exc",
    "content": "aardwolves aardwolf\nabaci abacus\naboideaux aboideau\naboiteaux aboiteau\nabscissae abscissa\nacanthi acanthus\nacari acarus\nacciaccature acciaccatura\nacetabula acetabulum\nachaemenidae achaemenid\nachaemenides achaemenid\nacicula aciculum\naciculae acicula\nacini acinus\nacre-feet acre-foot\nacromia acromion\nactiniae actinia\nactinozoa actinozoan\naddenda addendum\nadenocarcinomata adenocarcinoma\nadenomata adenoma\nadieux adieu\nadyta adytum\naecia aecium\naecidia aecidium\naerobia aerobium\nagents-general agent-general\naggiornamenti aggiornamento\nagnomina agnomen\nagones agon\nagorae agora\nagouties agouti\naides-de-camp aide-de-camp\naides-memoire aide-memoire\naids-de-camp aid-de-camp\nalae ala\nalewives alewife\nalkalies alkali\nallodia allodium\nalluvia alluvium\nalodia alodium\nalto-relievos alto-relievo alto-rilievo\naltocumuli altocumulus\naltostrati altostratus\nalulae alula\nalumnae alumna\nalumni alumnus\nalveoli alveolus\namanuenses amanuensis\nambulacra ambulacrum\namebae ameba\namici_curiae amicus_curiae\namnia amnion\namniocenteses amniocentesis\namoebae amoeba\namoebiases amoebiasis\namoraim amora\namoretti amoretto\namorini amorino\namphiarthroses amphiarthrosis\namphicia amphithecium\namphimixes amphimixis\namphioxi amphioxus\namphisbaenae amphisbaena\namphorae amphora\nampullae ampulla\namygdalae amygdala\nanabases anabasis\nanacolutha anacoluthon\nanacruses anacrusis\nanaerobia anaerobium\nanagnorises anagnorisis\nanalemmata analemma\nanalyses analysis\nanamneses anamnesis\nanamorphoses anamorphosis\nanastomoses anastomosis\nanatyxes anaptyxis\nancones ancon ancone\nandroclinia androclinium\nandroecia androecium\nandrosphinges androsphinx\nandtheridia antheridium\nangelfishes angelfish\nangiomata angioma\nanimalcula animalculum\nanlagen anlage\nannattos anatto annatto\nannuli annulus\nantae anta\nantalkalies antalkali\nantefixa antefix\nantennae antenna\nantependia antependium\nanthelia anthelion\nanthelices anthelix\nanthemia anthemion\nantheridia antheridium\nanthodia anthodium\nanthozoa anthozoan\nanthraces anthrax\nanticlinoria anticlinorium\nantihelices antihelix\nantiheroes antihero\nantisera antiserum\nantitheses antithesis\nantitragi antitragus\nantra antrum\nanus anus\naortae aorta\naphelia aphelion\naphides aphis\napices apex\napodoses apodosis\napomixes apomixis\naponeuroses aponeurosis\napophyses apophysis\naposiopeses aposiopesis\napothecia apothecium\napotheoses apotheosis\napparatus apparatus\nappendices appendix\nappoggiature appoggiatura\napsides apsis\naquae aqua\naquaria aquarium\naraglis argali\narboreta arboretum\narcana arcanum\narchegonia archegonium\narcherfishes archerfish\narchesporia archesporium\narchipelagoes archipelago\narcs-boutants arc-boutant\nareolae areola\nargali argali\nargumenta argumentum\nariette arietta\naristae arista\narmamentaria armamentarium\narses arsis\nartal rotl\nartel rotl\narterioscleroses arteriosclerosis\naruspices aruspex\nasceses ascesis\nasci ascus\nascidia ascidium\nascogonia ascogonium\nashkenazim ashkenazi\naspergilla aspergillum\naspergilli aspergillus\naspergilloses aspergillosis\naspersoria aspersorium\nassegais assagai assegai\nastragali astragalus\nasyndeta asyndeton\natheromata atheroma\natheroscleroses atherosclerosis\natmolyses atmolysis\natria atrium\nattorneys-at-law attorney-at-law\nauditoria auditorium\naurae aura\naurar eyrir\naurei aureus\nauriculae auricula\naurorae aurora\nauspices auspex auspice\nautocatalyses autocatalysis\nautochthones autochthon\nautomata automaton\nautos-da-fe auto-da-fe\navitaminoses avitaminosis\naxes ax axis\naxillae axilla\nbacchantes bacchant bacchante\nbacchii bacchius\nbacilli bacillus\nbacteriostases bacteriostasis\nbacula baculum\nbains-marie bain-marie\nbains_marie bain_marie\nballistae ballista\nbambini bambino\nbandeaux bandeau\nbanditti bandit\nbani ban\nbanjoes banjo\nbarklice barklouse\nbarramundies barramundi\nbases base basis\nbases-on-balls base_on_balls\nbases_on_balls base_on_balls\nbasidia basidium\nbasileis basileus\nbassi basso\nbastinadoes bastinado\nbateaux bateau\nbatfishes batfish\nbeadsmen beadsman bedesman\nbeaux beau\nbeches-de-mer beche-de-mer\nbeeves beef\nbehooves behoof\nbersaglieri bersagliere\nbhishties bheesty bhishti\nbibliothecae bibliotheca\nbicennaries bicentenary bicentennial\nbijoux bijou\nbilboes bilbo\nbillets-doux billet-doux\nbillfishes billfish\nbimboes bimbo\nbisectrices bisectrix\nblackfeet blackfoot\nblackfishes blackfish\nblastemata blastema\nblastulae blastula\nblindfishes blindfish\nblowfishes blowfish\nbluefishes bluefish\nboarfishes boarfish\nbok boschbok\nboleti boletus\nbolivares bolivar\nbolsheviki bolshevik\nbonefishes bonefish\nbongoes bongo\nbonitoes bonito\nbooklice booklouse\nbookshelves bookshelf\nboraces borax\nborborygmi borborygmus\nbordereaux bordereau\nbotargoes botargo\nbox-kodaks box_kodak\nboxfishes boxfish\nbrachia brachium\nbrainchildren brainchild\nbranchiae branchia\nbrants brant brent\nbravadoes bravado\nbravoes bravo\nbregmata bregma\nbrethren brother\nbroadcast_media broadcast_medium\nbroadleaves broadleaf\nbronchi bronchus\nbrothers-in-law brother-in-law\nbryozoa bryozoan\nbuboes bubo\nbuckoes bucko\nbuckteeth bucktooth\nbuffaloes buffalo\nbullae bulla\nbunde bund\nbureaux bureau\nbureaux_de_change bureau_de_change\nbursae bursa\nbushbok boschbok\nbushboks boschbok\nbusses bus\nbutterfishes butterfish\nbyssi byssus\ncacti cactus\ncaducei caduceus\ncaeca caecum\ncaesurae caesura\ncalami calamus\ncalathi calathus\ncalcanei calcaneum calcaneus\ncalces calx\ncalculi calculus\ncaldaria caldarium\ncalices calix\ncalicoes calico\ncalli callus\ncalves calf\ncalyces calyx\ncambia cambium\ncamerae camera\ncanaliculi canaliculus\ncandelabra candelabrum\ncandlefishes candlefish\ncanthi canthus\ncanulae canula\ncanzoni canzone\ncapita caput\ncapitula capitulum\ncapricci capriccio\ncarabinieri carabiniere\ncarbonadoes carbonado\ncarcinomata carcinoma\ncargoes cargo\ncarides caryatid\ncarinae carina\ncaroli carolus\ncarpi carpus\ncarpogonia carpogonium\ncarryings-on carrying-on\ncaryopses caryopsis\ncaryopsides caryopsis\ncastrati castrato\ncatabases catabasis\ncataclases cataclasis\ncataloes catalo\ncatalyses catalysis\ncatenae catena\ncatfishes catfish\ncathari cathar\ncathexes cathexis\ncattaloes cattalo\ncaudices caudex\ncaules caulis\ncavatine cavatina\ncavefishes cavefish\ncavetti cavetto\ncavo-rilievi cavo-rilievo\nceca cecum\ncellae cella\ncembali cembalo\ncentesimi centesimo\ncentra centrum\ncephalothoraces cephalothorax\ncercariae cercaria\ncercariiae cercaria\ncerci cercus\ncerebella cerebellum\ncerebra cerebrum\ncervices cervix\ncestuses caestus\ncesurae cesura\nchadarim cheder\nchaetae chaeta\nchaises_longues chaise_longue\nchalazae chalaza\nchalloth hallah\nchalutzim chalutz\nchapaties chapati\nchapatties chapatti\nchapeaux chapeau\nchasidim chasid\nchassidim chassid\nchateaux chateau\nchazanim chazan\nchedarim cheder\nchefs-d'ouvre chef-d'ouvre\nchelae chela\nchelicerae chelicera\ncherubim cherub\nchevaux-de-frise cheval-de-frise\nchiasmata chiasma\nchiasmi chiasmus\nchildren child\nchillies chilli\nchinese_eddoes chinese_eddo\nchitarroni chitarrone\nchlamydes chlamys\nchlamyses chlamys\nchondromata chondroma\nchoragi choragus\nchoriambi choriambus\nchoux chou\nchromonemata chromonema\nchrysalides chrysalis\nchuvashes chuvash\nciboria ciborium\ncicadae cicada\ncicale cicala\ncicatrices cicatrix\nciceroni cicerone\ncicisbei cicisbeo\ncilia cilium\ncimices cimex\ncineraria cinerarium\ncingula cingulum\ncirri cirrus\ncirrocumuli cirrocumulus\ncirrostrati cirrostratus\nciscoes cisco\ncisternae cisterna\nclani clarino\nclanos clarino\nclaroes claro\nclepsydrae clepsydra\nclinandria clinandrium\nclingfishes clingfish\nclitella clitellum\ncloacae cloaca\nclostridia clostridium\ncloverleaves cloverleaf\nclypei clypeus\ncoagula coagulum\ncoalfishes coalfish\ncocci coccus\ncoccyges coccyx\ncochleae cochlea\ncodfishes codfish\ncodices codex\ncoelentera coelenteron\ncoenuri coenurus\ncognomina cognomen\ncola colon\ncoleorhizae coleorhiza\ncollegia collegium\ncolloquia colloquium\ncolluvia colluvium\ncollyria collyrium\ncolones colon\ncolossi colossus\ncolumbaria columbarium\ncolumellae columella\ncomae coma\ncomatulae comatula\ncomedones comedo\ncomics comic_strip comic\ncommandoes commando\nconcertanti concertante\nconcerti concerto\nconcerti_grossi concerto_grosso\nconcertini concertino\nconchae concha\ncondottieri condottiere\ncondylomata condyloma\nconfervae conferva\ncongii congius\nconidia conidium\nconjunctivae conjunctiva\nconquistadores conquistador\nconsortia consortium\ncontagia contagium\ncontinua continuum\ncontralti contralto\nconversazioni conversazione\nconvolvuli convolvulus\ncooks-general cook-general\ncopulae copula\ncorbiculae corbicula\ncoria corium\ncorneae cornea\ncornua cornu\ncoronae corona\ncorpora corpus\ncorpora_lutea corpus_luteum\ncorpora_striata corpus_striatum\ncorrigenda corrigendum\ncortices cortex\ncortinae cortina\ncorybantes corybant\ncoryphaei coryphaeus\ncostae costa\ncothurni cothurnus\ncourts_martial court_martial\ncouteaux couteau\ncowfishes cowfish\ncoxae coxa\ncramboes crambo\ncrania cranium\ncrases crasis\ncrawfishes crawfish\ncrayfishes crayfish\ncredenda credendum\ncrematoria crematorium\ncrescendi crescendo\ncribella cribellum\ncrises crisis\ncrissa crissum\ncristae crista\ncriteria criterion\ncruces crux\ncrura crus\ncrusadoes crusado\ncruzadoes cruzado\ncrying cry\ncryings cry\nctenidia ctenidium\ncubicula cubiculum\nculices culex\nculpae culpa\nculs-de-sac cul-de-sac\nculti cultus\ncumuli cumulus\ncumulonimbi cumulonimbus\ncumulostrati cumulostratus\ncuriae curia\ncurricula curriculum\ncustodes custos\ncutes cutis\ncuticulae cuticula\ncuttlefishes cuttlefish\ncyclopes cyclops\ncycloses cyclosis\ncylices cylix\ncylikes cylix\ncymae cyma\ncymatia cymatium\ncypselae cypsela\ncysticerci cysticercus\ndadoes dado\ndagoes dago\ndamselfishes damselfish\ndata datum\ndaughters-in-law daughter-in-law\ndaymio daimio\ndaymios daimio\ndealfishes dealfish\ndecemviri decemvir\ndecennia decennium\ndeciduae decidua\ndefinienda definiendum\ndefinientia definiens\ndelphinia delphinium\ndenarii denarius\ndentalia dentalium\ndermatoses dermatosis\ndesiderata desideratum\ndesperadoes desperado\ndevilfishes devilfish\ndiaereses diaeresis\ndiaerses diaeresis\ndiagnoses diagnosis\ndialyses dialysis\ndiaphyses diaphysis\ndiapophyses diapophysis\ndiarthroses diarthrosis\ndiastalses diastalsis\ndiastases diastasis\ndiastemata diastema\ndiathses diathesis\ndiazoes diazo\ndibbukkim dibbuk\ndichasia dichasium\ndicta dictum\ndidoes dido\ndiereses dieresis\ndieses diesis\ndifferentiae differentia\ndilettanti dilettante\ndiluvia diluvium\ndingoes dingo\ndiplococci diplococcus\ndirectors-general director-general\ndisci discus\ndiscoboli discobolos discobolus\ndive diva\ndiverticula diverticulum\ndivertimenti divertimento\ndjinn djinni djinny\ndodoes dodo\ndogfishes dogfish\ndogmata dogma\ndogteeth dogtooth\ndollarfishes dollarfish\ndomatia domatium\ndominoes domino\ndormice dormouse\ndorsa dorsum\ndrachmae drachma\ndrawknives drawknife\ndrosophilae drosophila\ndrumfishes drumfish\ndryades dryad\ndui duo\nduona duodenum\nduonas duodenum\ndupondii dupondius\nduumviri duumvir\ndwarves dwarf\ndybbukkim dybbuk\necchymoses ecchymosis\necclesiae ecclesia\necdyses ecdysis\nechidnae echidna\nechini echinus\nechinococci echinococcus\nechoes echo\nectozoa ectozoan\neddoes eddo\nedemata edema\neffluvia effluvium\neidola eidolon\neisegeses eisegesis\neisteddfodau eisteddfod\nelenchi elenchus\nellipses ellipsis\neluvia eluvium\nelves elf\nelytra elytron elytrum\nembargoes embargo\nemboli embolus\nemphases emphasis\nemporia emporium\nenarthroses enarthrosis\nencephala encephalon\nencephalitides encephalitis\nencephalomata encephaloma\nenchiridia enchiridion\nenchondromata enchondroma\nencomia encomium\nendamebae endameba\nendamoebae endamoeba\nendocardia endocardium\nendocrania endocranium\nendometria endometrium\nendostea endosteum\nendostoses endostosis\nendothecia endothecium\nendothelia endothelium\nendotheliomata endothelioma\nendozoa endozoan\nenemata enema\nenneahedra enneahedron\nentamebae entameba\nentamoebae entamoeba\nentases entasis\nentera enteron\nentia ens\nentozoa entozoan entozoon\nepencephala epencephalon\nepentheses epenthesis\nepexegeses epexegesis\nephemera ephemeron\nephemerae ephemera\nephemerides ephemeris\nephori ephor\nepicalyces epicalyx\nepicanthi epicanthus\nepicardia epicardium\nepicedia epicedium\nepicleses epiclesis\nepididymides epididymis\nepigastria epigastrium\nepiglottides epiglottis\nepimysia epimysium\nepiphenomena epiphenomenon\nepiphyses epiphysis\nepisterna episternum\nepithalamia epithalamion epithalamium\nepithelia epithelium\nepitheliomata epithelioma\nepizoa epizoan epizoon\nepyllia epyllion\nequilibria equilibrium\nequiseta equisetum\neringoes eringo\nerrata erratum\neryngoes eryngo\nesophagi esophagus\netyma etymon\neucalypti eucalyptus\neupatridae eupatrid\neuripi euripus\nexanthemata exanthema\nexecutrices executrix\nexegeses exegesis\nexempla exemplum\nexordia exordium\nexostoses exostosis\nextrema extremum\neyeteeth eyetooth\nfabliaux fabliau\nfaciae facia\nfaculae facula\nfaeroese faeroese\nfallfishes fallfish\nfamuli famulus\nfarmers-general farmer-general\nfaroese faroese\nfarragoes farrago\nfasciae fascia\nfasciculi fasciculus\nfathers-in-law father-in-law\nfatsoes fatso\nfaunae fauna\nfeculae fecula\nfedayeen fedayee\nfeet foot\nfellaheen fellah\nfellahin fellah\nfelones_de_se felo_de_se\nfelos_de_se felo_de_se\nfemora femur\nfenestellae fenestella\nfenestrae fenestra\nferiae feria\nfermate fermata\nferulae ferula\nfestschriften festschrift\nfetiales fetial\nfezzes fez\nfiascoes fiasco\nfibrillae fibrilla\nfibromata fibroma\nfibulae fibula\nficoes fico\nfideicommissa fideicommissum\nfieldmice fieldmouse\nfigs. fig.\nfila filum\nfilariiae filaria\nfilefishes filefish\nfimbriae fimbria\nfishes fish\nfishwives fishwife\nfistulae fistula\nflabella flabellum\nflagella flagellum\nflagstaves flagstaff\nflambeaux flambeau\nflamines flamen\nflamingoes flamingo\nflatfeet flatfoot\nflatfishes flatfish\nfleurs-de-lis fleur-de-lis\nfleurs-de-lys fleur-de-lys\nflights_of_stairs flight_of_stairs\nflittermice flittermouse\nflocci floccus\nflocculi flocculus\nflorae flora\nfloreant. floreat\nflorilegia florilegium\nflowers-de-luce flower-de-luce\nflyleaves flyleaf\nfoci focus\nfolia folium\nfora forum\nforamina foramen\nforceps forceps\nforefeet forefoot\nforeteeth foretooth\nformicaria formicarium\nformulae formula\nfornices fornix\nfortes fortis\nfossae fossa\nfoveae fovea\nfoveolae foveola\nfractocumuli fractocumulus\nfractostrati fractostratus\nfraena fraenum\nfrauen frau\nfrena frenum\nfrenula frenulum\nfrescoes fresco\nfricandeaux fricandeau\nfricandoes fricando\nfrijoles frijol\nfrogfishes frogfish\nfrontes frons\nfrusta frustum\nfuci fucus\nfulcra fulcrum\nfumatoria fumatorium\nfundi fundus\nfungi fungus\nfuniculi funiculus\nfurcula furculum\nfurculae furcula\nfurfures furfur\ngaleae galea\ngambadoes gambado\ngametangia gametangium\ngametoecia gametoecium\ngammadia gammadion\nganglia ganglion\ngarfishes garfish\ngas gas\ngasses gas\ngastrulae gastrula\ngateaux gateau\ngazeboes gazebo\ngeckoes gecko\ngeese goose\ngelsemia gelsemium\ngemboks gemsbok\ngembucks gemsbuck\ngemeinschaften gemeinschaft\ngemmae gemma\ngenera genus\ngeneratrices generatrix\ngeneses genesis\ngenii genius\ngentes gens\ngentlemen-at-arms gentleman-at-arms\ngentlemen-farmers gentleman-farmer\ngenua genu\ngenus genus\ngermina germen\ngesellschaften gesellschaft\ngestalten gestalt\nghettoes ghetto\ngingivae gingiva\ngingkoes gingko\nginglymi ginglymus\nginkgoes ginkgo\ngippoes gippo\nglabellae glabella\ngladioli gladiolus\nglandes glans\ngliomata glioma\nglissandi glissando\nglobefishes globefish\nglobigerinae globigerina\nglochidcia glochidium\nglochidia glochidium\nglomeruli glomerulus\nglossae glossa\nglottides glottis\nglutaei glutaeus\nglutei gluteus\ngnoses gnosis\ngoatfishes goatfish\ngoboes gobo\ngodchildren godchild\ngoes go\ngoings-over going-over\ngoldfishes goldfish\ngomphoses gomphosis\ngonia gonion\ngonidia gonidium\ngonococci gonococcus\ngoodwives goodwife\ngoosefishes goosefish\ngorgoneia gorgoneion\ngospopoda gospodin\ngovernors_general governor_general\ngoyim goy\ngrafen graf\ngraffiti graffito\ngrandchildren grandchild\ngrants-in-aid grant-in-aid\ngranulomata granuloma\ngravamina gravamen\ngrig-gris gris-gris\ngroszy grosz\ngrottoes grotto\nguilder guilde\nguilders guilde guilder\nguitarfishes guitarfish\ngummata gumma\ngurnard gurnar\ngurnards gurnar gurnard\nguttae gutta\ngymnasia gymnasium\ngynaecea gynaeceum\ngynaecia gynaecium\ngynecea gynecium\ngynecia gynecium\ngynoecea gynoecium\ngynoecia gynoecium\ngyri gyrus\nhadarim heder\nhadjes hadj\nhaematolyses haematolysis\nhaematomata haematoma\nhaematozoa haematozoon\nhaemodialyses haemodialysis\nhaemolyses haemolysis\nhaemoptyses haemoptysis\nhaeredes haeres\nhaftaroth haftarah\nhagfishes hagfish\nhaggadas haggada haggadah\nhaggadoth haggada\nhajjes hajj\nhaleru haler\nhallot hallah\nhalloth hallah\nhalluces hallux\nhaloes halo\nhalteres halter haltere\nhalves half\nhamuli hamulus\nhangers-on hanger-on\nhaphtaroth haphtarah\nharedim haredi\nharuspices haruspex\nhasidim hasid\nhassidim hassid\nhaustella haustellum\nhaustoria haustorium\nhazzanim hazzan\nhectocotyli hectocotylus\nheirs-at-law heir-at-law\nheldentenore heldentenor\nhelices helix\nheliozoa heliozoan\nhematolyses hematolysis\nhematomata hematoma\nhematozoa hematozoon\nhemelytra hemelytron\nhemielytra hemielytron\nhemodialyses hemodialysis\nhemolyses hemolysis\nhemoptyses hemoptysis\nhendecahedra hendecahedron\nhens-and-chickens hen-and-chickens\nheraclidae heraclid\nheraklidae heraklid\nherbaria herbarium\nhermae herm herma\nhermai herma\nherniae hernia\nheroes hero\nherren herr\nhetaerae hetaera\nhetairai hetaira\nhibernacula hibernaculum\nhieracosphinges hieracosphinx\nhila hilum\nhili hilus\nhimatia himation\nhippocampi hippocampus\nhippopotami hippopotamus\nhis his\nhoboes hobo\nhogfishes hogfish\nhomunculi homunculus\nhonoraria honorarium\nhooves hoof\nhorologia horologium\nhousewives housewife\nhumeri humerus\nhydrae hydra\nhydromedusae hydromedusa\nhydrozoa hydrozoan\nhymenoptera hymenopteran\nhynia hymenium\nhyniums hymenium\nhypanthia hypanthium\nhyperostoses hyperostosis\nhyphae hypha\nhypnoses hypnosis\nhypochondria hypochondrium\nhypogastria hypogastrium\nhypogea hypogeum\nhypophyses hypophysis\nhypostases hypostasis\nhypothalami hypothalamus\nhypotheses hypothesis\nhyraces hyrax\niambi iamb\nibices ibex\nibo igbo\nichthyosauri ichthyosaurus\nichthyosauruses ichthyosaur ichthyosaurus\niconostases iconostas iconostasis\nicosahedra icosahedron\nideata ideatum\nigorrorote igorrote\nilia ilium\nimagines imago\nimagoes imago\nimperia imperium\nimpies impi\nincubi incubus\nincudes incus\nindices index\nindigoes indigo\nindumenta indumentum\nindusia indusium\ninfundibula infundibulum\ningushes ingush\ninnuendoes innuendo\ninocula inoculum\ninquisitors-general inquisitor-general\ninsectaria insectarium\ninsulae insula\nintagli intaglio\ninterleaves interleaf\nintermezzi intermezzo\ninterreges interrex\ninterregna interregnum\nintimae intima\ninvolucella involucellum\ninvolucra involucre\ninvolucra involucrum\nirides iris\nirs irs\nis is\nischia ischium\nisthmi isthmus\njackeroos jackaroo jackeroo\njackfishes jackfish\njackknives jackknife\njacks-in-the-box jack-in-the-box\njambeaux jambeau\njellyfishes jellyfish\njewelfishes jewelfish\njewfishes jewfish\njingoes jingo\njinn jinni\njoes jo joe\njudge_advocates_general judge_advocate_general\njura jus\nkaddishim kaddish\nkalmuck kalmuc\nkalmucks kalmuc kalmuck\nkatabases katabasis\nkeeshonden keeshond\nkibbutzim kibbutz\nkillifishes killifish\nkingfishes kingfish\nkings-of-arms king-of-arms\nknights_bachelor knight_bachelor\nknights_bachelors knight_bachelor\nknights_templar knight_templar\nknights_templars knight_templar\nknives knife\nkohlrabies kohlrabi\nkronen krone\nkroner krone\nkronur krona\nkrooni kroon\nkylikes kylix\nlabara labarum\nlabella labellum\nlabia labium\nlabra labrum\nlactobacilli lactobacillus\nlacunae lacuna\nlacunaria lacunar\nladies-in-waiting lady-in-waiting\nlamellae lamella\nlamiae lamia\nlaminae lamina\nlapilli lapillus\nlapithae lapith\nlarvae larva\nlarynges larynx\nlassoes lasso\nlati lat\nlatices latex\nlatifundia latifundium\nlatu lat\nlavaboes lavabo\nleaves leaf leave\nlecythi lecythus\nleges lex\nlei leu\nlemmata lemma\nlemnisci lemniscus\nlenes lenis\nlentigines lentigo\nleonides leonid\nlepidoptera lepidopteran\nleprosaria leprosarium\nlepta lepton\nleptocephali leptocephalus\nleucocytozoa leucocytozoan\nleva lev\nlibrae libra\nlibretti libretto\nlice louse\nlieder lied\nligulae ligula\nlimbi limbus\nlimina limen\nlimites limes\nlimuli limulus\nlingoes lingo\nlinguae lingua\nlinguae_francae lingua_franca\nlionfishes lionfish\nlipomata lipoma\nlire lira\nliriodendra liriodendron\nlistente sente\nlitai lit litas\nlitu litas\nlives life\nlixivia lixivium\nloaves loaf\nloci locus\nloculi loculus\nloggie loggia\nlogia logion\nlomenta lomentum\nlongobardi longobard\nloricae lorica\nluba luba\nlubritoria lubritorium\nlumbus lumbi\nlumina lumen\nlumpfishes lumpfish\nlungfishes lungfish\nlunulae lunula\nlures lur lure\nlustra lustre\nlyings-in lying-in\nlymphangitides lymphangitis\nlymphomata lymphoma\nlymphopoieses lymphopoiesis\nlyses lysis\nlyttae lytta\nmaare maar\nmacaronies macaroni\nmaccaronies maccaroni\nmachzorim machzor\nmacronuclei macronucleus\nmacrosporangia macrosporangium\nmaculae macula\nmadornos madrono\nmaestri maestro\nmafiosi mafioso\nmagi magus\nmagmata magma\nmagnificoes magnifico\nmahzorim mahzor\nmajor-axes major_axis\nmajor_axes major_axis\nmakuta likuta\nmallei malleus\nmalleoli malleolus\nmaloti loti\nmamillae mamilla\nmammae mamma\nmammillae mammilla\nmandingoes mandingo\nmangoes mango\nmanifestoes manifesto\nmanteaux manteau\nmantes mantis\nmanubria manubrium\nmarchese marchesa\nmarchesi marchese\nmaremme maremma\nmarkkaa markka\nmarsupia marsupium\nmarvels-of-peru marvel-of-peru\nmass_media mass_medium\nmasses mass masse\nmasters-at-arms master-at-arms\nmatrices matrix\nmatzoth matzo\nmausolea mausoleum\nmaxillae maxilla\nmaxima maximum\nmedia medium\nmediae media\nmediastina mediastinum\nmedullae medulla\nmedullae_oblongatae medulla_oblongata\nmedusae medusa\nmegara megaron\nmegasporangia megasporangium\nmegilloth megillah\nmeioses meiosis\nmelanomata melanoma\nmelismata melisma\nmementoes memento\nmemoranda memorandum\nmen man\nmen-at-arms man-at-arms\nmen-o'-war man-of-war\nmen-of-war man-of-war\nmen_of_letters man_of_letters\nmenisci meniscus\nmenservants manservant\nmenstrua menstruum\nmesdames madame\nmesdemoiselles mademoiselle\nmesentera mesenteron\nmesothoraces mesothorax\nmesseigneurs monseigneur\nmessieurs monsieur\nmestizoes mestizo\nmetacarpi metacarpus\nmetamorphoses metamorphosis\nmetanephroi metanephros\nmetastases metastasis\nmetatarsi metatarsus\nmetatheses metathesis\nmetathoraces metathorax\nmetazoa metazoan\nmetempsychoses metempsychosis\nmetencephala metencephalon\nmezuzoth mezuzah\nmiasmata miasma\nmice mouse\nmicroanalyses microanalysis\nmicrococci micrococcus\nmicronuclei micronucleus\nmicrosporangia microsporangium\nmidrashim midrash\nmidwives midwife\nmilia milium\nmilieux milieu\nmilitated_against militate_against\nmilkfishes milkfish\nmillennia millennium\nminae mina\nminima minimum\nministeria ministerium\nminutiae minutia\nminyanim minyan\nmioses miosis\nmiracidia miracidium\nmiri mir\nmishnayoth mishna mishnah\nmitochondria mitochondrion\nmitzvoth mitzvah\nmodioli modiolus\nmoduli modulus\nmomenta momentum\nmoments_of_truth moment_of_truth\nmomi momus\nmonades monad monas\nmonkfishes monkfish\nmonochasia monochasium\nmonopodia monopodium\nmonoptera monopteron\nmonopteroi monopteros\nmonsignori monsignor\nmonts-de-piete mont-de-piete\nmooncalves mooncalf\nmoonfishes moonfish\nmorae mora\nmoratoria moratorium\nmorceaux morceau\nmorescoes moresco\nmoriscoes morisco\nmorphallaxes morphallaxis\nmorphoses morphosis\nmorulae morula\nmosasauri mosasaurus\nmoshavim moshav\nmoslim moslem\nmoslims moslem\nmosquitoes mosquito\nmothers-in-law mother-in-law\nmothers_superior mother_superior\nmottoes motto\nmovers_and_shakers mover_and_shaker\nmucosae mucosa\nmucrones mucro\nmudejares mudejar\nmudfishes mudfish\nmulattoes mulatto\nmultiparae multipara\nmurices murex\nmuskallunge muskellunge\nmycelia mycelium\nmycetomata mycetoma\nmycobacteria mycobacterium\nmycorrhizae mycorrhiza\nmyelencephala myelencephalon\nmyiases myiasis\nmyocardia myocardium\nmyofibrillae myofibrilla\nmyomata myoma\nmyoses myosis\nmyrmidones myrmidon\nmythoi mythos\nmyxomata myxoma\nnaevi naevus\nnaiades naiad\nnaoi naos\nnarcissi narcissus\nnares naris\nnasopharynges nasopharynx\nnatatoria natatorium\nnaumachiae naumachia\nnauplii nauplius\nnautili nautilus\nnavahoes navaho\nnavajoes navajo\nnebulae nebula\nnecropoleis necropolis\nneedlefishes needlefish\nnegrilloes negrillo\nnegritoes negrito\nnegroes negro\nnemeses nemesis\nnephridia nephridium\nnereides nereid\nneurohypophyses neurohypophysis\nneuromata neuroma\nneuroptera neuropteron\nneuroses neurosis\nnevi nevus\nnibelungen nibelung\nnidi nidus\nnielli niello\nnilgai nilgai\nnimbi nimbus\nnimbostrati nimbostratus\nnoctilucae noctiluca\nnodi nodus\nnoes no\nnomina nomen\nnota notum\nnoumena noumenon\nnovae nova\nnovelle novella\nnovenae novena\nnubeculae nubecula\nnucelli nucellus\nnuchae nucha\nnuclei nucleus\nnucleoli nucleolus\nnulliparae nullipara\nnumbfishes numbfish\nnumina numen\nnymphae nympha\noarfishes oarfish\noases oasis\nobeli obelus\nobjets_d'art objet_d'art\nobligati obligato\noboli obolus\noccipita occiput\noceanaria oceanarium\noceanides oceanid\nocelli ocellus\nochreae ochrea\nocreae ochrea ocrea\noctahedra octahedron\noctopi octopus\noculi oculus\nodea odeum\noedemata edema oedema\noesophagi esophagus oesophagus\noldwives oldwife\nolea oleum\nomasa omasum\nomayyades omayyad\nomenta omentum\nommatidia ommatidium\nommiades ommiad\nonagri onager\noogonia oogonium\noothecae ootheca\noperas_seria opera_seria\nopercula operculum\noptima optimum\nora os\norgana organon organum\norganums organa organum\northoptera orthopteron\nosar os\noscula osculum\nossa os\nosteomata osteoma\nostia ostium\nottomans othman ottoman\nova ovum\novoli ovolo\novotestes ovotestis\noxen ox\noxymora oxymoron\npaddlefishes paddlefish\npaise paisa\npaleae palea\npalestrae palestra\npalingeneses palingenesis\npallia pallium\npalmettoes palmetto\npalpi palpus\npancratia pancratium\npanettoni panettone\npaparazzi paparazzo\npaperknives paperknife\npapillae papilla\npapillomata papilloma\npappi pappus\npapulae papula\npapyri papyrus\nparabases parabasis\nparaleipses paraleipsis paralipsis\nparalyses paralysis\nparamecia paramecium\nparamenta parament\nparaphyses paraphysis\nparapodia parapodium\nparapraxes parapraxis\nparaselenae paraselene\nparashoth parashah\nparasyntheta parasyntheton\nparazoa parazoan\nparentheses parenthesis\nparerga parergon\nparhelia parhelion\nparietes paries\nparis-mutuels pari-mutuel\nparrotfishes parrotfish\nparulides parulis\npasos_dobles paso_doble\npassers-by passer-by\npastorali pastorale\npatagia patagium\npatellae patella\npatinae patina\npatresfamilias paterfamilias\npease pea\npeccadilloes peccadillo\npectines pecten\npedaloes pedalo\npedes pes\npekingese pekinese\npelves pelvis\npence penny\npenes penis\npenetralium penetralia\npenicillia penicillium\npenknives penknife\npennae penna\npennia penni\npentahedra pentahedron\npentimenti pentimento\npenumbrae penumbra\npepla peplum\npericardia pericardium\nperichondria perichondrium\npericrania pericranium\nperidia peridium\nperigonia perigonium\nperihelia perihelion\nperinea perineum\nperinephria perinephrium\nperionychia perionychium\nperiostea periosteum\nperiphrases periphrasis\nperistalses peristalsis\nperithecia perithecium\nperitonea peritoneum\npersonae persona\npetechiae petechia\npfennige pfennig\nphalanges phalange phalanx\nphalli phallus\npharynges pharynx\nphenomena phenomenon\nphi-phenomena phi-phenomenon\nphilodendra philodendron\nphlyctenae phlyctaena phlyctena\nphyla phylum\nphylae phyle\nphyllotaxes phyllotaxis\nphylloxerae phylloxera\nphylogeneses phylogenesis\npieds-a-terre pied-a-terre\npigfishes pigfish\npilea pileum\npilei pileus\npineta pinetum\npinfishes pinfish\npinkoes pinko\npinnae pinna\npinnulae pinnula\npipefishes pipefish\npirogi pirog\npiscinae piscina\npithecanthropi pithecanthropus\npithoi pithos\nplaceboes placebo\nplacentae placenta\nplanetaria planetarium\nplanulae planula\nplasmodesmata plasmodesma\nplasmodia plasmodium\nplateaux plateau\nplectra plectron plectrum\nplena plenum\npleura pleuron\npleurae pleura\nplicae plica\nploughmen ploughman plowman\npneumobacilli pneumobacillus\npneumococci pneumococcus\npocketknives pocketknife\npodetia podetium\npodia podium\npoleis polis\npollices pollex\npollinia pollinium\npolychasia polychasium\npolyhedra polyhedron\npolyparia polyparium\npolypi polypus\npolyzoa polyzoan\npolyzoaria polyzoarium\npontes pons\npontifices pontifex\nportamenti portamento\nporticoes portico\nportmanteaux portmanteau\npostliminia postliminium\npotatoes potato\npraenomina praenomen\npraxes praxis\npredelle predella\npremaxillae premaxilla\nprenomina prenomen\nprese presa\nprimi primo\nprimigravidae primigravida\nprimiparae primipara\nprimordia primordium\nprincipia principium\nproboscides proboscis\nproces-verbaux proces-verbal\nproglottides proglottid proglottis\nprognoses prognosis\nprolegomena prolegomenon\nprolepses prolepsis\npromycelia promycelium\npronephra pronephros\npronephroi pronephros\npronuclei pronucleus\npropositi propositus\nproptoses proptosis\npropyla propylon\npropylaea propylaeum\nproscenia proscenium\nprosencephala prosencephalon\nprostheses prosthesis\nprostomia prostomium\nprotases protasis\nprothalamia prothalamion prothalamium\nprothalli prothallus\nprothallia prothallium\nprothoraces prothorax\nprotonemata protonema\nprotozoa protozoan\nproventriculi proventriculus\nprovisoes proviso\nprytanea prytaneum\npsalteria psalterium\npseudopodia pseudopodium\npsychoneuroses psychoneurosis\npsychoses psychosis\npterygia pterygium\npterylae pteryla\nptoses ptosis\npubes pubis\npudenda pudendum\npuli pul\npulvilli pulvillus\npulvini pulvinus\npunchinelloes punchinello\npupae pupa\npuparia puparium\nputamina putamen\nputti putto\npycnidia pycnidium\npygidia pygidium\npylori pylorus\npyxides pyxis\npyxidia pyxidium\nqaddishim qaddish\nquadrennia quadrennium\nquadrigae quadriga\nqualia quale\nquanta quantum\nquarterstaves quarterstaff\nquezales quezal\nquinquennia quinquennium\nquizzes quiz\nrabatos rabato rebato\nrabbitfishes rabbitfish\nrachides rhachis\nradices radix\nradii radius\nradulae radula\nramenta ramentum\nrami ramus\nranulae ranula\nranunculi ranunculus\nraphae raphe\nraphides raphide raphis\nratfishes ratfish\nreales real\nrearmice rearmouse\nrecta rectum\nrecti rectus\nrectrices rectrix\nredfishes redfish\nrediae redia\nreferenda referendum\nrefugia refugium\nreguli regulus\nreis real\nrelata relatum\nremiges remex\nreremice rearmouse reremouse\nreseaux reseau\nresidua residuum\nresponsa responsum\nretia rete\nretiarii retiarius\nreticula reticulum\nretinacula retinaculum\nretinae retina\nrhabdomyomata rhabdomyoma\nrhachides rhachis\nrhachises rachis rhachis\nrhinencephala rhinencephalon\nrhizobia rhizobium\nrhombi rhombus\nrhonchi rhonchus\nrhyta rhyton\nribbonfishes ribbonfish\nricercacari ricercare\nricercari ricercare\nrickettsiae rickettsia\nrilievi rilievo\nrimae rima\nrobes-de-chambre robe-de-chambre\nrockfishes rockfish\nroma rom\nromans-fleuves roman-fleuve\nrondeaux rondeau\nrosaria rosarium\nrosefishes rosefish\nrostella rostellum\nrostra rostrum\nrouleaux rouleau\nrugae ruga\nrumina rumen\nrunners-up runner-up\nsacra sacrum\nsacraria sacrarium\nsaguaros saguaro sahuaro\nsailfishes sailfish\nsalespeople salesperson\nsalmonellae salmonella\nsalpae salpa\nsalpinges salpinx\nsaltarelli saltarello\nsalvoes salvo\nsancta sanctum\nsanitaria sanitarium\nsantimi santims\nsaphenae saphena\nsarcophagi sarcophagus\nsartorii sartorius\nsassanidae sassanid\nsawfishes sawfish\nscaldfishes scaldfish\nscaleni scalenus\nscapulae scapula\nscarabaei scarabaeus\nscarves scarf\nschatchonim schatchen shadchan\nschemata schema\nscherzandi scherzando\nscherzi scherzo\nschmoes schmo\nscholia scholium\nschuln schul\nschutzstaffeln schutzstaffel\nscirrhi scirrhus\nscleromata scleroma\nscleroses sclerosis\nsclerotia sclerotium\nscoleces scolex\nscolices scolex\nscopulae scopula\nscoriae scoria\nscotomata scotoma\nscriptoria scriptorium\nscrota scrotum\nscudi scudo\nscuta scutum\nscutella scutellum\nscyphi scyphus\nscyphistomae scyphistoma\nscyphozoa scyphozoan\nsecondi secondo\nsecretaries-general secretary-general\nsegni segno\nseleucidae seleucid\nselves self\nsenores senor\nsensilla sensillum\nsenti sent\nsenussis senusi senussi\nseparatrices separatrix\nsephardim sephardi\nsepta septum\nseptaria septarium\nseptennia septennium\nsequelae sequela\nsequestra sequestrum\nsera serum\nseraphim seraph\nsestertia sestertium\nsetae seta\nsgraffiti sgraffito\nshabbasim shabbas\nshabbatim shabbat\nshackoes shacko\nshadchanim shadchan\nshadchans schatchen shadchan\nshakoes shako\nshammosim shammas shammes\nsheatfishes sheatfish\nsheaves sheaf\nshellfishes shellfish\nshelves shelf\nshinleaves shinleaf\nshittim shittah\nshmoes shmo\nshofroth shofar shophar\nshophroth shophar\nshrewmice shrewmouse\nshuln shul\nsiddurim siddur\nsigloi siglos\nsignore signora\nsignori signior signore\nsignorine signorina\nsiliquae siliqua\nsilvae silva\nsilverfishes silverfish\nsimulacra simulacrum\nsincipita sinciput\nsinfonie sinfonia\nsisters-in-law sister-in-law\nsistra sistrum\nsitulae situla\nsmalti smalto\nsnaggleteeth snaggletooth\nsnailfishes snailfish\nsnipefishes snipefish\nsocmen socman sokeman\nsola solum\nsolaria solarium\nsolatia solatium\nsoldi soldo\nsoles sol sole\nsolfeggi solfeggio\nsoli solo\nsolidi solidus\nsomata soma\nsons-in-law son-in-law\nsoprani soprano\nsordini sordino\nsori sorus\nsoroses sorosis\nsovkhozy sovkhoz\nspadefishes spadefish\nspadices spadix\nspearfishes spearfish\nspectra spectrum\nspecula speculum\nspermatia spermatium\nspermatogonia spermatogonium\nspermatozoa spermatozoon\nspermogonia spermogonium\nsphinges sphinx\nspicae spica\nspicula spiculum\nspirilla spirillum\nsplayfeet splayfoot\nsplenii splenius\nsporangia sporangium\nsporogonia sporogonium\nsporozoa sporozoan\nspringhase springhaas\nspumoni spumone\nsputa sputum\nsquamae squama\nsquashes squash\nsquillae squilla\nsquirrelfishes squirrelfish\nsquizzes squiz\nstadia stadium\nstamina stamen\nstaminodia staminodium\nstapedes stapes\nstaphylococci staphylococcus\nstarfishes starfish\nstartsy starets\nstelae stele\nstemmata stemma\nstenoses stenosis\nstepchildren stepchild\nsterna sternum\nstigmata stigma\nstimuli stimulus\nstipites stipes\nstirpes stirps\nstoae stoa\nstockfishes stockfish\nstomata stoma\nstomodaea stomodaeum\nstomodea stomodeum\nstonefishes stonefish\nstotinki stotinka\nstotkini stotinka\nstrappadoes strappado\nstrata stratum\nstrati stratus\nstratocumuli stratocumulus\nstreet_children street_child\nstreptococci streptococcus\nstretti stretto\nstriae stria\nstrobili strobilus\nstromata stroma\nstrumae struma\nstuccoes stucco\nstyli stylus\nstylopes stylops\nstylopodia stylopodium\nsubcortices subcortex\nsubdeliria subdelirium\nsubgenera subgenus\nsubindices subindex\nsubmucosae submucosa\nsubphyla subphylum\nsubstrasta substratum\nsuccedanea succedaneum\nsuccubi succubus\nsuckerfishes suckerfish\nsuckfishes suckfish\nsudaria sudarium\nsudatoria sudatorium\nsulci sulcus\nsummae summa\nsunfishes sunfish\nsupercargoes supercargo\nsuperheroes superhero\nsupernovae supernova\nsuperstrata superstratum\nsurgeonfishes surgeonfish\nswamies swami\nsweetiewives sweetiewife\nswellfishes swellfish\nswordfishes swordfish\nsyconia syconium\nsyllabi syllabus\nsyllepses syllepsis\nsymphyses symphysis\nsympodia sympodium\nsymposia symposium\nsynapses synapsis\nsynarthroses synarthrosis\nsynclinoria synclinorium\nsyncytia syncytium\nsyndesmoses syndesmosis\nsynopses synopsis\nsyntagmata syntagma\nsyntheses synthesis\nsyphilomata syphiloma\nsyringes syrinx\nsyssarcoses syssarcosis\ntableaux tableau\ntaeniae taenia tenia\ntali talus\ntallaisim tallith\ntallithes tallith\ntallitoth tallith\ntapeta tapetum\ntarantulae tarantula\ntarsi tarsus\ntarsometatarsi tarsometatarsus\ntaxa taxon\ntaxes tax taxis\ntaxies taxi\ntectrices tectrix\nteeth tooth\ntegmina tegmen\ntelae tela\ntelamones telamon\ntelangiectases telangiectasia telangiectasis\ntelia telium\ntempi tempo\ntenacula tenaculum\ntenderfeet tenderfoot\nteniae tenia\ntenues tenuis\nteraphim teraph\nterata teras\nteredines teredo\nterga tergum\ntermini terminus\nterraria terrarium\nterzetti terzetto\ntesserae tessera\ntestae testa\ntestes testis\ntestudines testudo\ntetrahedra tetrahedron\ntetraskelia tetraskelion\nthalamencephala thalamencephalon\nthalami thalamus\nthalli thallus\ntheatres-in-the-round theatre-in-the-round\nthecae theca\ntherses thyrse\nthesauri thesaurus\ntheses thesis\nthickleaves thickleaf\nthieves thief\ntholoi tholos\nthoraces thorax\nthrombi thrombus\nthymi thymus\nthyrsi thyrsus\ntibiae tibia\ntilefishes tilefish\ntintinnabula tintinnabulum\ntitmice titmouse\ntoadfishes toadfish\ntobaccoes tobacco\ntomatoes tomato\ntomenta tomentum\ntondi tondo\ntonneaux tonneau\ntophi tophus\ntopoi topos\ntori torus\ntornadoes tornado\ntorpedoes torpedo\ntorsi torso\ntouracos touraco turaco\ntrabeculae trabecula\ntracheae trachea\ntraditores traditor\ntragi tragus\ntrapezia trapezium\ntrapezohedra trapezohedron\ntraumata trauma\ntreponemata treponema\ntrichinae trichina\ntriclinia triclinium\ntriennia triennium\ntriforia triforium\ntriggerfishes triggerfish\ntrihedra trihedron\ntriskelia triskelion\ntrisoctahedra trisoctahedron\ntriumviri triumvir\ntrivia trivium\ntrochleae trochlea\ntropaeola tropaeolum\ntrous-de-loup trou-de-loup\ntrousseaux trousseau\ntrunkfishes trunkfish\ntrymata tryma\ntubae tuba\nturves turf\ntympana tympanum\ntyros tiro tyro\nubermenschen ubermensch\nuglies ugli\nuigurs uighur\nulnae ulna\nultimata ultimatum\numbilici umbilicus\numbones umbo\numbrae umbra\nunci uncus\nuncidia uredium\nuredines uredo\nuredinia uredinium\nuredosori uredosorus\nurethrae urethra\nurinalyses urinalysis\nuteri uterus\nutriculi utriculus\nuvulae uvula\nvacua vacuum\nvagi vagus vagus\nvaginae vagina\nvalleculae vallecula\nvaporetti vaporetto\nvarices varix\nvasa vas\nvascula vasculum\nvela velum\nvelamina velamen\nvelaria velarium\nvenae vena\nvenae_cavae vena_cava\nventriculi ventriculus\nvermes vermis\nverrucae verruca\nvertebrae vertebra\nvertices vertex\nvertigines vertigo\nvertigoes vertigo\nvesicae vesica\nvetoes veto\nvexilla vexillum\nviatica viaticum\nviatores viator\nvibracula vibraculum\nvibrissae vibrissa\nvice-chairman vice-chairman\nvilli villus\nvimina vimen\nvincula vinculum\nviragoes virago\nvires vis\nvirtuosi virtuoso\nvitae vita\nvitelli vitellus\nvittae vitta\nvivaria vivarium\nvoces vox\nvolcanoes volcano\nvolkslieder volkslied\nvolte volta\nvolvae volva\nvorticellae vorticella\nvortices vortex\nvulvae vulva\nwagons-lits wagon-lit\nwahhabis wahabi wahhabi\nwanderjahre wanderjahr\nweakfishes weakfish\nwerewolves werewolf\nwharves wharf\nwhippers-in whipper-in\nwhitefishes whitefish\nwives wife\nwolffishes wolffish\nwolves wolf\nwoodlice woodlouse\nwreckfishes wreckfish\nwunderkinder wunderkind\nxiphisterna xiphisternum\nyeshivahs yeshiva\nyeshivoth yeshiva\nyogin yogi\nyourselves yourself\nzamindaris zamindari zemindari\nzecchini zecchino\nzeroes zero\nzoa zoon\nzoaeae zoaea zoea\nzoeae zoea\nzoeas zoaea\nzoonoses zoonosis\nzoosporangia zoosporangium\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/WordNet-2.0-Exceptions/verb.exc",
    "content": "abetted abet\nabetting abet\nabhorred abhor\nabhorring abhor\nabode abide\nabought aby\nabout-shipped about-ship\nabout-shipping about-ship\nabutted abut\nabutting abut\nabye aby\naccompanied accompany\nacetified acetify\nacidified acidify\nacquitted acquit\nacquitting acquit\nad-libbed ad-lib\nad-libbing ad-lib\naddrest address\nadmitted admit\nadmitting admit\naerified aerify\nair-dried air-dry\nairdropped airdrop\nairdropping airdrop\nalkalified alkalify\nallied ally\nallotted allot\nallotting allot\nallowed_for allow_for\nallowing_for allow_for\nallows_for allow_for\nam be\nammonified ammonify\namnestied amnesty\namplified amplify\nanglified anglify\nannulled annul\nannulling annul\nappalled appal appall\nappalling appal appall\napplied apply\narcked arc\narcking arc\nare be\nargufied argufy\narisen arise\narose arise\nate eat\natrophied atrophy\naverred aver\naverring aver\nawoke awake\nawoken awake\nbabied baby\nbaby-sat baby-sit\nbaby-sitting baby-sit\nback-pedalled back-pedal\nback-pedalling back-pedal\nbackbit backbite\nbackbitten backbite\nbackslid backslide\nbackslidden backslide\nbade bid\nbagged bag\nbagging bag\nballyragged ballyrag\nballyragging ballyrag\nbandied bandy\nbanned ban\nbanning ban\nbarred bar\nbarrelled barrel\nbarrelling barrel\nbarring bar\nbasified basify\nbatted bat\nbatting bat\nbayonetted bayonet\nbayonetting bayonet\nbeaten beat\nbeatified beatify\nbeautified beautify\nbecame become\nbecame_known become_known\nbecomes_known become_known\nbed bed\nbedded bed\nbedding bed\nbedevilled bedevil\nbedevilling bedevil\nbedimmed bedim\nbedimming bedim\nbeen be\nbefallen befall\nbefell befall\nbefitted befit\nbefitting befit\nbefogged befog\nbefogging befog\nbegan begin\nbegat beget\nbegetting beget\nbegged beg\nbegging beg\nbeginning begin\nbegirt begird\nbegot beget\nbegotten beget\nbegun begin\nbeheld behold\nbeholden behold\nbejewelled bejewel\nbejewelling bejewel\nbellied belly\nbelly-flopped belly-flop\nbelly-flopping belly-flop\nbelying belie\nbenefitted benefit\nbenefitting benefit\nbenempt bename\nbent bend\nberried berry\nbesetting beset\nbesought beseech\nbespoke bespeak\nbespoken bespeak\nbestirred bestir\nbestirring bestir\nbestrewn bestrew\nbestrid bestride\nbestridden bestride\nbestrode bestride\nbetaken betake\nbethought bethink\nbetook betake\nbetted bet\nbetting bet\nbevelled bevel\nbevelling bevel\nbiassed bias\nbiassing bias\nbidden bid\nbidding bid\nbing bing\nbinned bin\nbinning bin\nbird-dogged bird-dog\nbird-dogging bird-dog\nbit bite\nbitted bit\nbitten bite\nbitting bit\nbivouacked bivouac\nbivouacking bivouac\nblabbed blab\nblabbing blab\nblackberried blackberry\nblacklegged blackleg\nblacklegging blackleg\nblatted blat\nblatting blat\nbled bleed\nblest bless\nblew blow\nblew_one's_nose blow_one's_nose\nblipped blip\nblipping blip\nblobbed blob\nblobbing blob\nbloodied bloody\nblotted blot\nblotting blot\nblowing_one's_nose blow_one's_nose\nblown blow\nblows_one's_nose blow_one's_nose\nblubbed blub\nblubbing blub\nblue-pencilled blue-pencil\nblue-pencilling blue-pencil\nblurred blur\nblurring blur\nbobbed bob\nbobbing bob\nbodied body\nbogged-down bog-down\nbogged_down bog_down\nbogging-down bog-down\nbogging_down bog_down\nbogs-down bog-down\nbogs_down bog_down\nbooby-trapped booby-trap\nbooby-trapping booby-trap\nbootlegged bootleg\nbootlegging bootleg\nbopped bop\nbopping bop\nbore bear\nborn bear\nborne bear\nbottle-fed bottle-feed\nbought buy\nbound bind\nbragged brag\nbragging brag\nbreast-fed breast-feed\nbred breed\nbrevetted brevet\nbrevetting brevet\nbrimmed brim\nbrimming brim\nbroke break\nbroken break\nbrought bring\nbrowbeaten browbeat\nbrutified brutify\nbudded bud\nbudding bud\nbugged bug\nbugging bug\nbuilt build\nbulldogging bulldog\nbullied bully\nbullshitted bullshit\nbullshitting bullshit\nbullwhipped bullwhip\nbullwhipping bullwhip\nbullyragged bullyrag\nbullyragging bullyrag\nbummed bum\nbumming bum\nburied bury\nburnt burn\nburred bur\nburring bur\nbushelled bushel\nbushelling bushel\nbusied busy\nbypast bypass\ncaballed cabal\ncaballing cabal\ncaddied caddie caddy\ncaddies caddie caddy\ncaddying caddie caddy\ncalcified calcify\ncame come\ncanalled canal\ncanalling canal\ncancelled cancel\ncancelling cancel\ncandied candy\ncanned can\ncanning can\ncanopied canopy\ncapped cap\ncapping cap\ncarburetted carburet\ncarburetting carburet\ncarillonned carillon\ncarillonning carillon\ncarnied carny\ncarnified carnify\ncarolled carol\ncarolling carol\ncarried carry\ncasefied casefy\ncatnapped catnap\ncatnapping catnap\ncatted cat\ncatting cat\ncaught catch\ncavilled cavil\ncavilling cavil\ncertified certify\nchannelled channel\nchannelling channel\nchapped chap\nchapping chap\ncharred char\ncharring char\nchatted chat\nchatting chat\nchevied chivy\nchevies chivy\nchevying chivy\nchid chide\nchidden chide\nchinned chin\nchinning chin\nchipped chip\nchipping chip\nchiselled chisel\nchiselling chisel\nchitchatted chitchat\nchitchatting chitchat\nchivied chivy\nchivved chiv\nchivvied chivy\nchivvies chivy\nchivving chiv\nchivvying chivy\nchondrified chondrify\nchopped chop\nchopping chop\nchose choose\nchosen choose\nchugged chug\nchugging chug\nchummed chum\nchumming chum\ncitified citify\nclad clothe\ncladding clad\nclammed clam\nclamming clam\nclapped clap\nclapping clap\nclarified clarify\nclassified classify\ncleft cleave\nclemmed clem\nclemming clem\nclept clepe\nclipped clip\nclipping clip\nclogged clog\nclogging clog\nclopped clop\nclopping clop\nclotted clot\nclotting clot\nclove cleave\ncloven cleave\nclubbed club\nclubbing club\nclung cling\nco-opted coopt\nco-opting coopt\nco-opts coopts\nco-ordinate coordinate\nco-ordinated coordinate\nco-ordinates coordinate\nco-ordinating coordinate\nco-starred co-star\nco-starring co-star\ncockneyfied cockneyfy\ncodded cod\ncodding cod\ncodified codify\ncogged cog\ncogging cog\ncoiffed coif\ncoiffing coif\ncollied colly\ncombatted combat\ncombatting combat\ncommitted commit\ncommitting commit\ncompelled compel\ncompelling compel\ncomplied comply\ncomplotted complot\ncomplotting complot\nconcurred concur\nconcurring concur\nconfabbed confab\nconfabbing confab\nconferred confer\nconferring confer\nconned con\nconning con\ncontrolled control\ncontrolling control\ncopied copy\ncopped cop\ncopping cop\ncoquetted coquet\ncoquetting coquet\ncorralled corral\ncorralling corral\ncounselled counsel\ncounselling counsel\ncounterplotted counterplot\ncounterplotting counterplot\ncountersank countersink\ncountersunk countersink\ncourt-martialled court-martial\ncourt-martialling court-martial\ncrabbed crab\ncrabbing crab\ncrammed cram\ncramming cram\ncrapped crap\ncrapping crap\ncrept creep\ncribbed crib\ncribbing crib\ncried cry\ncropped crop\ncropping crop\ncrossbred crossbreed\ncrosscutting crosscut\ncrucified crucify\ncubbed cub\ncubbing cub\ncudgelled cudgel\ncudgelling cudgel\ncupelled cupel\ncupelling cupel\ncupped cup\ncupping cup\ncuretted curet\ncurettes curet\ncuretting curet\ncurried curry\ncurst curse\ncurtsied curtsy\ncurvetted curvet\ncurvetting curvet\ncutting cut\ndabbed dab\ndabbing dab\ndagged dag\ndagging dag\ndallied dally\ndammed dam\ndamming dam\ndamnified damnify\ndandified dandify\ndapped dap\ndapping dap\ndealt deal\ndebarred debar\ndebarring debar\ndebugged debug\ndebugging debug\ndebussed debus\ndebusses debus\ndebussing debus\ndecalcified decalcify\ndeclassified declassify\ndecontrolled decontrol\ndecontrolling decontrol\ndecried decry\ndeep-freeze deepfreeze\ndeep-freezed deepfreeze\ndeep-freezes deepfreeze\ndeep-fried deep-fry\ndeferred defer\ndeferring defer\ndefied defy\ndegassed degas\ndegasses degas\ndegassing degas\ndehumidified dehumidify\ndeified deify\ndemitted demit\ndemitting demit\ndemobbed demob\ndemobbing demob\ndemulsified demulsify\ndemurred demur\ndemurring demur\ndemystified demystify\ndenazified denazify\ndenied deny\ndenitrified denitrify\ndenned den\ndenning den\ndescried descry\ndeterred deter\ndeterring deter\ndetoxified detoxify\ndevilled devil\ndevilling devil\ndevitrified devitrify\ndiagrammed diagram\ndiagramming diagram\ndialled dial\ndialling dial\ndibbed dib\ndibbing dib\ndid do\ndigging dig\ndignified dignify\ndilly-dallied dilly-dally\ndimmed dim\ndimming dim\ndinned din\ndinning din\ndipped dip\ndipping dip\ndirtied dirty\ndisannulled disannul\ndisannulling disannul\ndisbarred disbar\ndisbarring disbar\ndisbudded disbud\ndisbudding disbud\ndisembodied disembody\ndisembowelled disembowel\ndisembowelling disembowel\ndisenthralled disenthral disenthrall\ndisenthralling disenthral disenthrall\ndisenthralls disenthral\ndisenthrals disenthrall\ndishevelled dishevel\ndishevelling dishevel\ndisinterred disinter\ndisinterring disinter\ndispelled dispel\ndispelling dispel\ndisqualified disqualify\ndissatisfied dissatisfy\ndistilled distil distill\ndistilling distil distill\ndiversified diversify\ndivvied divvy\ndizzied dizzy\ndogged dog\ndogging dog\ndoglegged dogleg\ndoglegging dogleg\ndollied dolly\ndone do\ndonned don\ndonning don\ndotted dot\ndotting dot\ndought dow\ndove dive\ndrabbed drab\ndrabbing drab\ndragged drag\ndragging drag\ndrank drink\ndrawn draw\ndreamt dream\ndrew draw\ndried dry\ndripped drip\ndripping drip\ndrivelled drivel\ndrivelling drivel\ndriven drive\ndropped drop\ndropping drop\ndrove drive\ndrubbed drub\ndrubbing drub\ndrugged drug\ndrugging drug\ndrummed drum\ndrumming drum\ndrunk drink\ndubbed dub\ndubbing dub\nduelled duel\nduelling duel\ndug dig\ndulcified dulcify\ndummied dummy\ndunned dun\ndunning dun\ndwelt dwell\ndying die\neasied easy\neaten eat\neavesdropped eavesdrop\neavesdropping eavesdrop\neddied eddy\nedified edify\nego-tripped ego-trip\nego-tripping ego-trip\nelectrified electrify\nembedded embed\nembedding embed\nembodied embody\nembussed embus\nembusses embus\nembussing embus\nemitted emit\nemitting emit\nempanelled empanel\nempanelling empanel\nemptied empty\nemulsified emulsify\nenamelled enamel\nenamelling enamel\nenglutted englut\nenglutting englut\nenrolled enrol enroll\nenrolling enrol enroll\nenthralled enthral enthrall\nenthralling enthral enthrall\nentrammelled entrammel\nentrammelling entrammel\nentrapped entrap\nentrapping entrap\nenvied envy\nenwound enwind\nenwrapped enwrap\nenwrapping enwrap\nequalled equal\nequalling equal\nequipped equip\nequipping equip\nespied espy\nesterified esterify\nestopped estop\nestopping estop\netherified etherify\nexcelled excel\nexcelling excel\nexemplified exemplify\nexpelled expel\nexpelling expel\nextolled extol extoll\nextolling extol extoll\nfacetted facet\nfacetting facet\nfagged fag\nfagging fag\nfallen fall\nfalsified falsify\nfancied fancy\nfanned fan\nfanning fan\nfantasied fantasy\nfatted fat\nfatting fat\nfeatherbedded featherbed\nfeatherbedding featherbed\nfed feed\nfeed feed fee\nfell fall\nfelt feel felt\nferried ferry\nfibbed fib\nfibbing fib\nfigged fig\nfigging fig\nfilled_up fill_up\nfine-drawn fine-draw\nfine-drew fine-draw\nfinned fin\nfinning fin\nfitted fit\nfitting fit\nflagged flag\nflagging flag\nflammed flam\nflamming flam\nflannelled flannel\nflannelling flannel\nflapped flap\nflapping flap\nflatted flat\nflatting flat\nfled flee\nflew fly\nflimflammed flimflam\nflimflamming flimflam\nflip-flopped flip-flop\nflip-flopping flip-flop\nflipped flip\nflipping flip\nflitted flit\nflitting flit\nflogged flog\nflogging flog\nfloodlit floodlight\nflopped flop\nflopping flop\nflown fly\nflubbed flub\nflubbing flub\nflung fling\nflurried flurry\nflyblew flyblow\nflyblown flyblow\nfobbed fob\nfobbing fob\nfogged fog\nfogging fog\nfootslogged footslog\nfootslogging footslog\nforbad forbid\nforbade forbid\nforbidden forbid\nforbidding forbid\nforbore forbear\nforborne forbear\nforce-fed force-feed\nfordid fordo\nfordone fordo\nforedid foredo\nforedone foredo\nforegone forego\nforeknew foreknow\nforeknown foreknow\nforeran forerun\nforerunning forerun\nforesaw foresee\nforeseen foresee\nforeshown foreshow\nforespoke forespeak\nforespoken forespeak\nforetold foretell\nforewent forego\nforgave forgive\nforgetting forget\nforgiven forgive\nforgone forgo\nforgot forget\nforgotten forget\nformatted format\nformatting format\nforsaken forsake\nforsook forsake\nforspoke forspeak\nforspoken forspeak\nforswore forswear\nforsworn forswear\nfortified fortify\nforwent forgo\nfought fight\nfound find\nfoxtrotted foxtrot\nfoxtrotting foxtrot\nfrapped frap\nfrapping frap\nfreeze-dried freeze-dry\nfrenchified frenchify\nfrenzied frenzy\nfretted fret\nfretting fret\nfried fry\nfrigged frig\nfrigging frig\nfritted frit fritt\nfritting frit fritt\nfrivolled frivol\nfrivolling frivol\nfrogged frog\nfrogging frog\nfrolicked frolic\nfrolicking frolic\nfroze freeze\nfrozen freeze\nfructified fructify\nfuelled fuel\nfuelling fuel\nfulfilled fulfil fulfill\nfulfilling fulfil fulfill\nfunned fun\nfunnelled funnel\nfunnelling funnel\nfunning fun\nfurred fur\nfurring fur\ngadded gad\ngadding gad\ngagged gag\ngagging gag\ngainsaid gainsay\ngambolled gambol\ngambolling gambol\ngammed gam\ngamming gam\ngan gin\nganned gan\nganning gan\ngapped gap\ngapping gap\ngasified gasify\ngassed gas\ngasses gas\ngassing gas\ngave give\ngelled gel\ngelling gel\ngelt geld\ngemmed gem\ngemming gem\ngenned-up gen-up\ngenning-up gen-up\ngens-up gen-up\ngets_lost get_lost\ngets_started get_started\ngetting get\ngetting_lost get_lost\ngetting_started get_started\nghostwritten ghostwrite\nghostwrote ghostwrite\ngibbed gib\ngibbing gib\ngiddied giddy\ngiftwrapped giftwrap\ngiftwrapping giftwrap\ngigged gig\ngigging gig\ngilt gild\nginned gin\nginning gin\ngipped gip\ngipping gip\ngirt gird\ngiven give\nglommed glom\nglomming glom\ngloried glory\nglorified glorify\nglutted glut\nglutting glut\ngnawn gnaw\ngoes_deep go_deep\ngoing_deep go_deep\ngollied golly\ngone go\ngone_deep go_deep\ngoose-stepped goose-step\ngoose-stepping goose-step\ngot get\ngot_lost get_lost\ngot_started get_started\ngotten get\ngotten_lost get_lost\ngrabbed grab\ngrabbing grab\ngratified gratify\ngravelled gravel\ngravelling gravel\ngraven grave\ngrew grow\ngrinned grin\ngrinning grin\ngripped grip\ngripping grip\ngript grip\ngritted grit\ngritting grit\nground grind\ngrovelled grovel\ngrovelling grovel\ngrown grow\ngrubbed grub\ngrubbing grub\nguarantied guaranty\ngullied gully\ngummed gum\ngumming gum\ngunned gun\ngunning gun\ngypped gyp\ngypping gyp\nhacksawn hacksaw\nhad have\nhad_a_feeling have_a_feeling\nhad_left have_left\nhad_the_feeling have_the_feeling\nhammed ham\nhamming ham\nhamstrung hamstring\nhand-knitted hand-knit\nhand-knitting hand-knit\nhandfed handfeed\nhandicapped handicap\nhandicapping handicap\nhandselled handsel\nhandselling handsel\nharried harry\nhas have\nhas_a_feeling have_a_feeling\nhas_left have_left\nhas_the_feeling have_the_feeling\nhatchelled hatchel\nhatchelling hatchel\nhatted hat\nhatting hat\nhaving_a_feeling have_a_feeling\nhaving_left have_left\nhaving_the_feeling have_the_feeling\nheard hear\nhedgehopped hedgehop\nhedgehopping hedgehop\nheld hold\nhemmed hem\nhemming hem\nhewn hew\nhiccupped hiccup\nhiccupping hiccup\nhid hide\nhidden hide\nhigh-hatted high-hat\nhigh-hatting high-hat\nhinnied hinny\nhitting hit\nhobbed hob\nhobbing hob\nhobnobbed hobnob\nhobnobbing hobnob\nhocus-pocussed hocus-pocus\nhocus-pocussing hocus-pocus\nhocussed hocus\nhocussing hocus\nhogged hog\nhogging hog\nhogtying hogtie\nhonied honey\nhopped hop\nhopping hop\nhorrified horrify\nhorsewhipped horsewhip\nhorsewhipping horsewhip\nhouselled housel\nhouselling housel\nhove heave\nhovelled hovel\nhovelling hovel\nhugged hug\nhugging hug\nhumbugged humbug\nhumbugging humbug\nhumidified humidify\nhummed hum\nhumming hum\nhung hang\nhurried hurry\nhypertrophied hypertrophy\nidentified identify\nimbedded imbed\nimbedding imbed\nimpanelled impanel\nimpanelling impanel\nimpelled impel\nimpelling impel\nimplied imply\ninbred inbreed\nincurred incur\nincurring incur\nindemnified indemnify\nindwelt indwell\ninferred infer\ninferring infer\ninitialled initial\ninitialling initial\ninlaid inlay\ninsetting inset\ninspanned inspan\ninspanning inspan\ninstalled instal install\ninstalling instal install\nintensified intensify\ninterbred interbreed\nintercropped intercrop\nintercropping intercrop\nintercutting intercut\ninterlaid interlay\ninterlapped interlap\ninterlapping interlap\nintermarried intermarry\nintermitted intermit\nintermitting intermit\ninterpled interplead\ninterred inter\ninterring inter\ninterstratified interstratify\ninterwove interweave\ninterwoven interweave\nintromitted intromit\nintromitting intromit\ninwove inweave\ninwoven inweave\ninwrapped inwrap\ninwrapping inwrap\nis be\njabbed jab\njabbing jab\njagged jag\njagging jag\njammed jam\njamming jam\njapanned japan\njapanning japan\njarred jar\njarring jar\njellied jelly\njellified jellify\njemmied jemmy\njerry-built jerry-build\njetted jet\njetting jet\njewelled jewel\njewelling jewel\njibbed jib\njibbing jib\njigged jig\njigging jig\njimmied jimmy\njitterbugged jitterbug\njitterbugging jitterbug\njobbed job\njobbing job\njog-trotted jog-trot\njog-trotting jog-trot\njogged jog\njogging jog\njoined_battle join_battle\njoined_forces join_forces\njoining_battle join_battle\njoining_forces join_forces\njoins_battle join_battle\njoins_forces join_forces\njollied jolly\njollified jollify\njotted jot\njotting jot\njoy-ridden joy-ride\njoy-rode joy-ride\njoypopped joypop\njoypopping joypop\njugged jug\njugging jug\njumped_off jump_off\njumping_off jump_off\njumps_off jump_off\njustified justify\njutted jut\njutting jut\nkenned ken\nkennelled kennel\nkennelling kennel\nkenning ken\nkent ken\nkept keep\nkernelled kernel\nkernelling kernel\nkidded kid\nkidding kid\nkidnapped kidnap\nkidnapping kidnap\nkipped kip\nkipping kip\nknapped knap\nknapping knap\nkneecapped kneecap\nkneecapping kneecap\nknelt kneel\nknew know\nknitted knit\nknitting knit\nknobbed knob\nknobbing knob\nknotted knot\nknotting knot\nknown know\nko'd ko\nko'ing ko\nko's ko\nlabelled label\nlabelling label\nladen lade\nladyfied ladify\nladyfies ladify\nladyfying ladify\nlagged lag\nlagging lag\nlaid lay\nlain lie\nlallygagged lallygag\nlallygagging lallygag\nlammed lam\nlamming lam\nlapidified lapidify\nlapped lap\nlapping lap\nlaurelled laurel\nlaurelling laurel\nlay lie\nlayed_for lie_for\nlaying_for lie_for\nlays_for lie_for\nleant lean\nleapfrogged leapfrog\nleapfrogging leapfrog\nleapt leap\nlearnt learn\nleaves_undone leave_undone\nleaving_undone leave_undone\nled lead\nleft leave\nleft_undone leave_undone\nlent lend\nletting let\nlevelled level\nlevelling level\nlevied levy\nlibelled libel\nlibelling libel\nlignified lignify\nlipped lip\nlipping lip\nliquefied liquefy\nliquified liquify\nlit light\nlobbed lob\nlobbied lobby\nlobbing lob\nlogged log\nlogging log\nlooked_towards look_towards\nlooking_towards look_towards\nlooks_towards look_towards\nlopped lop\nlopping lop\nlost lose\nlotted lot\nlotting lot\nlugged lug\nlugging lug\nlullabied lullaby\nlying lie\nmachine-gunned machine-gun\nmachine-gunning machine-gun\nmadded mad\nmadding mad\nmade make\nmagnified magnify\nmanned man\nmanning man\nmanumitted manumit\nmanumitting manumit\nmapped map\nmapping map\nmarcelled marcel\nmarcelling marcel\nmarred mar\nmarried marry\nmarring mar\nmarshalled marshal\nmarshalling marshal\nmarvelled marvel\nmarvelling marvel\nmatted mat\nmatting mat\nmeant mean\nmedalled medal\nmedalling medal\nmet meet\nmetalled metal\nmetalling metal\nmetrified metrify\nmight may\nmilitated_against militate_against\nmilitates_against militate_against\nmilitating_against militate_against\nmimicked mimic\nmimicking mimic\nminified minify\nmisapplied misapply\nmisbecame misbecome\nmiscarried miscarry\nmisdealt misdeal\nmisfitted misfit\nmisfitting misfit\nmisgave misgive\nmisgiven misgive\nmishitting mishit\nmislaid mislay\nmisled mislead\nmispled misplead\nmisspelt misspell\nmisspent misspend\nmistaken mistake\nmistook mistake\nmisunderstood misunderstand\nmobbed mob\nmobbing mob\nmodelled model\nmodelling model\nmodified modify\nmollified mollify\nmolten melt\nmopped mop\nmopping mop\nmortified mortify\nmown mow\nmudded mud\nmuddied muddy\nmudding mud\nmugged mug\nmugging mug\nmultiplied multiply\nmummed mum\nmummified mummify\nmumming mum\nmutinied mutiny\nmystified mystify\nnabbed nab\nnabbing nab\nnagged nag\nnagging nag\nnapped nap\nnapping nap\nnetted net\nnetting net\nnibbed nib\nnibbing nib\nnickelled nickel\nnickelling nickel\nnid-nodded nid-nod\nnid-nodding nid-nod\nnidified nidify\nnigrified nigrify\nnipped nip\nnipping nip\nnitrified nitrify\nnodded nod\nnodding nod\nnon-prossed non-pros\nnon-prosses non-pros\nnon-prossing non-pros\nnonplussed nonplus\nnonplusses nonplus\nnonplussing nonplus\nnotified notify\nnullified nullify\nnutted nut\nnutting nut\nobjectified objectify\noccupied occupy\noccurred occur\noccurring occur\noffsetting offset\nomitted omit\nomitting omit\nossified ossify\noutbidden outbid\noutbidding outbid\noutbred outbreed\noutcried outcry\noutcropped outcrop\noutcropping outcrop\noutdid outdo\noutdone outdo\noutdrawn outdraw\noutdrew outdraw\noutfitted outfit\noutfitting outfit\noutfought outfight\noutgassed outgas\noutgasses outgas\noutgassing outgas\noutgeneralled outgeneral\noutgeneralling outgeneral\noutgone outgo\noutgrew outgrow\noutgrown outgrow\noutlaid outlay\noutmanned outman\noutmanning outman\noutputted output\noutputting output\noutran outrun\noutridden outride\noutrode outride\noutrunning outrun\noutshone outshine\noutshot outshoot\noutsold outsell\noutspanned outspan\noutspanning outspan\noutstood outstand\noutstripped outstrip\noutstripping outstrip\noutthought outthink\noutwent outgo\noutwitted outwit\noutwitting outwit\noutwore outwear\noutworn outwear\noverbidden overbid\noverbidding overbid\noverblew overblow\noverblown overblow\noverbore overbear\noverborne overbear\noverbuilt overbuild\novercame overcome\novercropped overcrop\novercropping overcrop\noverdid overdo\noverdone overdo\noverdrawn overdraw\noverdrew overdraw\noverdriven overdrive\noverdrove overdrive\noverflew overfly\noverflown overflow overfly\novergrew overgrow\novergrown overgrow\noverheard overhear\noverhung overhang\noverlaid overlay\noverlain overlie\noverlapped overlap\noverlapping overlap\noverlay overlie\noverlying overlie\novermanned overman\novermanning overman\noverpaid overpay\noverpast overpass\noverran overrun\noverridden override\noverrode override\noverrunning overrun\noversaw oversee\noverseen oversee\noversetting overset\noversewn oversew\novershot overshoot\noversimplified oversimplify\noverslept oversleep\noversold oversell\noverspent overspend\noverspilt overspill\noverstepped overstep\noverstepping overstep\novertaken overtake\noverthrew overthrow\noverthrown overthrow\novertook overtake\novertopped overtop\novertopping overtop\noverwound overwind\noverwritten overwrite\noverwrote overwrite\npacified pacify\npadded pad\npadding pad\npaid pay\npalled pal\npalling pal\npalsied palsy\npandied pandy\npanelled panel\npanelling panel\npanicked panic\npanicking panic\npanned pan\npanning pan\nparallelled parallel\nparallelling parallel\nparcelled parcel\nparcelling parcel\nparodied parody\nparried parry\npartaken partake\npartook partake\npasquil pasquinade\npasquilled pasquinade\npasquilling pasquinade\npasquils pasquinade\npatrolled patrol\npatrolling patrol\npatted pat\npatting pat\npedalled pedal\npedalling pedal\npegged peg\npegging peg\npencilled pencil\npencilling pencil\npenned pen\npenning pen\npent pen\npepped pep\npepping pep\npermitted permit\npermitting permit\npersonified personify\npetrified petrify\npetted pet\npettifogged pettifog\npettifogging pettifog\npetting pet\nphantasied phantasy\nphotocopied photocopy\nphotomapped photomap\nphotomapping photomap\nphotosetting photoset\nphysicked physic\nphysicking physic\npicnicked picnic\npicnicking picnic\npigged pig\npigging pig\npilloried pillory\npinch-hitting pinch-hit\npinned pin\npinning pin\npipped pip\npipping pip\npistol-whipped pistol-whip\npistol-whipping pistol-whip\npistolled pistol\npistolling pistol\npitapatted pitapat\npitapatting pitapat\npitied pity\npitted pit\npitting pit\nplanned plan\nplanning plan\nplatted plat\nplatting plat\nplayed_a_part play_a_part\nplaying_a_part play_a_part\nplays_a_part play_a_part\npled plead\nplied ply\nplodded plod\nplodding plod\nplopped plop\nplopping plop\nplotted plot\nplotting plot\nplugged plug\nplugging plug\npodded pod\npodding pod\npommelled pommel\npommelling pommel\npopes popes\npopped pop\npopping pop\npotted pot\npotting pot\npreachified preachify\nprecancelled precancel\nprecancelling precancel\npreferred prefer\npreferring prefer\npreoccupied preoccupy\nprepaid prepay\npresignified presignify\npretermitted pretermit\npretermitting pretermit\nprettied pretty\nprettified prettify\npried pry\nprigged prig\nprigging prig\nprimmed prim\nprimming prim\nprodded prod\nprodding prod\nprogrammed program\nprogrammes program\nprogramming program\nprologed prologue\nprologing prologue\nprologs prologue\npropelled propel\npropelling propel\nprophesied prophesy\npropped prop\npropping prop\nproven prove\npubbed pub\npubbing pub\npugged pug\npugging pug\npummelled pummel\npummelling pummel\npunned pun\npunning pun\npupped pup\npupping pup\npurified purify\nput-putted put-put\nput-putting put-put\nputrefied putrefy\nputtied putty\nputting put\nqualified qualify\nquantified quantify\nquarrelled quarrel\nquarrelling quarrel\nquarried quarry\nquartersawn quartersaw\nqueried query\nquick-froze quick-freeze\nquick-frozen quick-freeze\nquickstepped quickstep\nquickstepping quickstep\nquipped quip\nquipping quip\nquitted quit\nquitting quit\nquizzed quiz\nquizzes quiz\nquizzing quiz\nragged rag\nragging rag\nrallied rally\nramified ramify\nrammed ram\nramming ram\nran run\nrang ring\nrapped rap\nrappelled rappel\nrappelling rappel\nrapping rap\nrarefied rarefy\nratified ratify\nratted rat\nratting rat\nravelled ravel\nravelling ravel\nrazor-cutting razor-cut\nre-trod re-tread\nre-trodden re-tread\nrebelled rebel\nrebelling rebel\nrebuilt rebuild\nrebutted rebut\nrebutting rebut\nrecapped recap\nrecapping recap\nreclassified reclassify\nrecommitted recommit\nrecommitting recommit\nrecopied recopy\nrectified rectify\nrecurred recur\nrecurring recur\nred red\nred-pencilled red-pencil\nred-pencilling red-pencil\nredded red redd\nredding red redd\nredid redo\nredone redo\nreferred refer\nreferring refer\nrefitted refit\nrefitting refit\nreft reave\nrefuelled refuel\nrefuelling refuel\nregretted regret\nregretting regret\nreheard rehear\nreified reify\nrelied rely\nremade remake\nremarried remarry\nremitted remit\nremitting remit\nrent rend\nrepaid repay\nrepelled repel\nrepelling repel\nreplevied replevy\nreplied reply\nrepotted repot\nrepotting repot\nreran rerun\nrerunning rerun\nresat resit\nresetting reset\nresewn resew\nresitting resit\nretaken retake\nrethought rethink\nretold retell\nretook retake\nretransmitted retransmit\nretransmitting retransmit\nretried retry\nretrofitted retrofit\nretrofitting retrofit\nretted ret\nretting ret\nreunified reunify\nrevelled revel\nrevelling revel\nrevetted revet\nrevetting revet\nrevivified revivify\nrevved rev\nrevving rev\nrewound rewind\nrewritten rewrite\nrewrote rewrite\nribbed rib\nribbing rib\nricochetted ricochet\nricochetting ricochet\nridded rid\nridden ride\nridding rid\nrigged rig\nrigging rig\nrigidified rigidify\nrimmed rim\nrimming rim\nripped rip\nripping rip\nrisen rise\nrivalled rival\nrivalling rival\nriven rive\nrobbed rob\nrobbing rob\nrode ride\nrose rise\nrotted rot\nrotting rot\nrough-dried rough-dry\nrough-hewn rough-hew\nrove reeve\nrowelled rowel\nrowelling rowel\nrubbed rub\nrubbing rub\nrung ring\nrunning run\nrutted rut\nrutting rut\nsaccharified saccharify\nsagged sag\nsagging sag\nsaid say\nsalaried salary\nsalified salify\nsallied sally\nsanctified sanctify\nsandbagged sandbag\nsandbagging sandbag\nsang sing\nsank sink\nsaponified saponify\nsapped sap\nsapping sap\nsat sit\nsatisfied satisfy\nsavvied savvy\nsaw see\nsawn saw\nscagged scag\nscagging scag\nscanned scan\nscanning scan\nscarified scarify\nscarred scar\nscarring scar\nscatted scat\nscatting scat\nscorified scorify\nscragged scrag\nscragging scrag\nscrammed scram\nscramming scram\nscrapped scrap\nscrapping scrap\nscried scry\nscrubbed scrub\nscrubbing scrub\nscrummed scrum\nscrumming scrum\nscudded scud\nscudding scud\nscummed scum\nscumming scum\nscurried scurry\nseed seed\nseen see\nsent send\nsetting set\nsewn sew\nshagged shag\nshagging shag\nshaken shake\nshaken_hands shake_hands\nshakes_hands shake_hands\nshaking_hands shake_hands\nshammed sham\nshamming sham\nsharecropped sharecrop\nsharecropping sharecrop\nshat shit\nshaven shave\nshed shed\nshedding shed\nshellacked shellac\nshellacking shellac\nshent shend\nshewn shew\nshied shy\nshikarred shikar\nshikarring shikar\nshillyshallied shillyshally\nshimmed shim\nshimmied shimmy\nshimming shim\nshinned shin\nshinning shin\nshipped ship\nshipping ship\nshitted shit\nshitting shit\nshod shoe\nshone shine\nshook shake\nshook_hands shake_hands\nshopped shop\nshopping shop\nshot shoot\nshotgunned shotgun\nshotgunning shotgun\nshotted shot\nshotting shot\nshovelled shovel\nshovelling shovel\nshown show\nshrank shrink\nshredded shred\nshredding shred\nshrink-wrapped shrink-wrap\nshrink-wrapping shrink-wrap\nshrivelled shrivel\nshrivelling shrivel\nshriven shrive\nshrove shrive\nshrugged shrug\nshrugging shrug\nshrunk shrink\nshrunken shrink\nshunned shun\nshunning shun\nshutting shut\nsicked sic\nsicking sic\nsideslipped sideslip\nsideslipping sideslip\nsidestepped sidestep\nsidestepping sidestep\nsightsaw sightsee\nsightseen sightsee\nsignalled signal\nsignalling signal\nsignified signify\nsilicified silicify\nsimplified simplify\nsinging sing singe\nsingle-stepped single-step\nsingle-stepping single-step\nsinned sin\nsinning sin\nsipped sip\nsipping sip\nsitting sit\nskellied skelly\nskenned sken\nskenning sken\nsketted sket\nsketting sket\nski'd ski\nskidded skid\nskidding skid\nskimmed skim\nskimming skim\nskin-popped skin-pop\nskin-popping skin-pop\nskinned skin\nskinning skin\nskinny-dipped skinny-dip\nskinny-dipping skinny-dip\nskipped skip\nskipping skip\nskivvied skivvy\nskydove skydive\nslabbed slab\nslabbing slab\nslagged slag\nslagging slag\nslain slay\nslammed slam\nslamming slam\nslapped slap\nslapping slap\nslatted slat\nslatting slat\nsledding sled\nslept sleep\nslew slay\nslid slide\nslidden slide\nslipped slip\nslipping slip\nslitting slit\nslogged slog\nslogging slog\nslopped slop\nslopping slop\nslotted slot\nslotting slot\nslugged slug\nslugging slug\nslummed slum\nslumming slum\nslung sling\nslunk slink\nslurred slur\nslurring slur\nsmelt smell\nsmit smite\nsmitten smite\nsmote smite\nsmutted smut\nsmutting smut\nsnagged snag\nsnagging snag\nsnapped snap\nsnapping snap\nsnedded sned\nsnedding sned\nsnipped snip\nsnipping snip\nsnivelled snivel\nsnivelling snivel\nsnogged snog\nsnogging snog\nsnubbed snub\nsnubbing snub\nsnuck sneak\nsnugged snug\nsnugging snug\nsobbed sob\nsobbing sob\nsodded sod\nsodding sod\nsoft-pedalled soft-pedal\nsoft-pedalling soft-pedal\nsold sell\nsolemnified solemnify\nsolidified solidify\nsoothsaid soothsay\nsopped sop\nsopping sop\nsought seek\nsown sow\nspagged spag\nspagging spag\nspancelled spancel\nspancelling spancel\nspanned span\nspanning span\nsparred spar\nsparring spar\nspat spit\nspatted spat\nspatting spat\nspecified specify\nsped speed\nspeechified speechify\nspellbound spellbind\nspelt spell\nspent spend\nspied spy\nspilt spill\nspin-dried spin-dry\nspinning spin\nspiralled spiral\nspiralling spiral\nspitted spit\nspitting spit\nsplitting split\nspoilt spoil\nspoke speak\nspoken speak\nspoon-fed spoon-feed\nspotlit spotlight\nspotted spot\nspotting spot\nsprang spring\nsprigged sprig\nsprigging sprig\nsprung spring\nspudded spud\nspudding spud\nspun spin\nspurred spur\nspurring spur\nsquatted squat\nsquatting squat\nsquibbed squib\nsquibbing squib\nsquidded squid\nsquidding squid\nsquilgee squeegee\nstabbed stab\nstabbing stab\nstall-fed stall-feed\nstank stink\nstarred star\nstarring star\nsteadied steady\nstellified stellify\nstemmed stem\nstemming stem\nstems_from stem_from\nstencilled stencil\nstencilling stencil\nstepped step\nstepping step\nstetted stet\nstetting stet\nstied sty\nstilettoeing stiletto\nstirred stir\nstirring stir\nstole steal\nstolen steal\nstood stand\nstopped stop\nstopping stop\nstoried story\nstotted stot\nstotting stot\nstove stave\nstrapped strap\nstrapping strap\nstratified stratify\nstrewn strew\nstridden stride\nstripped strip\nstripping strip\nstriven strive\nstrode stride\nstropped strop\nstropping strop\nstrove strive\nstrown strow\nstruck strike\nstrummed strum\nstrumming strum\nstrung string\nstrutted strut\nstrutting strut\nstubbed stub\nstubbing stub\nstuck stick\nstudded stud\nstudding stud\nstudied study\nstultified stultify\nstummed stum\nstumming stum\nstung sting\nstunk stink\nstunned stun\nstunning stun\nstupefied stupefy\nstymying stymie\nsubbed sub\nsubbing sub\nsubjectified subjectify\nsubletting sublet\nsubmitted submit\nsubmitting submit\nsubtotalled subtotal\nsubtotalling subtotal\nsullied sully\nsulphuretted sulphuret\nsulphuretting sulphuret\nsummed sum\nsumming sum\nsung sing\nsunk sink\nsunken sink\nsunned sun\nsunning sun\nsupped sup\nsupping sup\nsupplied supply\nswabbed swab\nswabbing swab\nswagged swag\nswagging swag\nswam swim\nswapped swap\nswapping swap\nswatted swat\nswatting swat\nswept sweep\nswigged swig\nswigging swig\nswimming swim\nswivelled swivel\nswivelling swivel\nswollen swell\nswopped swap\nswopping swap\nswops swap\nswore swear\nsworn swear\nswotted swot\nswotting swot\nswum swim\nswung swing\nsyllabified syllabify\nsymbolled symbol\nsymbolling symbol\ntabbed tab\ntabbing tab\ntagged tag\ntagging tag\ntaken take\ntaken_a_side take_a_side\ntaken_pains take_pains\ntaken_steps take_steps\ntakes_a_side take_a_side\ntakes_pains take_pains\ntakes_steps take_steps\ntaking_a_side take_a_side\ntaking_pains take_pains\ntaking_steps take_steps\ntalcked talc\ntalcking talc\ntallied tally\ntally-ho'd tally-ho\ntammied tammy\ntanned tan\ntanning tan\ntapped tap\ntapping tap\ntarred tar\ntarried tarry\ntarring tar\ntasselled tassel\ntasselling tassel\ntatted tat\ntatting tat\ntaught teach\ntaxis taxis\ntaxying taxi\nteaselled teasel\nteaselling teasel\ntedded ted\ntedding ted\ntepefied tepefy\nterrified terrify\ntestes testes\ntestified testify\nthinking_the_world_of think_the_world_of\nthinks_the_world_of think_the_world_of\nthinned thin\nthinning thin\nthought think\nthought_the_world_of think_the_world_of\nthrew throw\nthrew_out throw_out\nthriven thrive\nthrobbed throb\nthrobbing throb\nthrove thrive\nthrowing_out throw_out\nthrown throw\nthrown_out throw_out\nthrows_out throw_out\nthrummed thrum\nthrumming thrum\nthudded thud\nthudding thud\ntidied tidy\ntinned tin\ntinning tin\ntinselled tinsel\ntinselling tinsel\ntipped tip\ntipping tip\ntittupped tittup\ntittupping tittup\ntoadied toady\ntogged tog\ntogging tog\ntold tell\ntook take\ntook_a_side take_a_side\ntook_pains take_pains\ntook_steps take_steps\ntopped top\ntopping top\ntore tear\ntorn tear\ntorrefied torrefy\ntorrify torrefy\ntotalled total\ntotalling total\ntotted tot\ntotting tot\ntowelled towel\ntowelling towel\ntrafficked traffic\ntrafficking traffic\ntrameled trammel\ntrameling trammel\ntramelled trammel\ntramelling trammel\ntramels trammel\ntrammed tram\ntramming tram\ntransferred transfer\ntransferring transfer\ntransfixt transfix\ntranship transship\ntranshipped tranship\ntranshipping tranship\ntransmitted transmit\ntransmitting transmit\ntransmogrified transmogrify\ntransshipped transship\ntransshipping transship\ntrapanned trapan\ntrapanning trapan\ntrapped trap\ntrapping trap\ntravelled travel\ntravelling travel\ntravestied travesty\ntrekked trek\ntrekking trek\ntrepanned trepan\ntrepanning trepan\ntried try\ntrigged trig\ntrigging trig\ntrimmed trim\ntrimming trim\ntripped trip\ntripping trip\ntrod tread\ntrodden tread\ntrogged trog\ntrogging trog\ntrotted trot\ntrotting trot\ntrowelled trowel\ntrowelling trowel\ntugged tug\ntugging tug\ntumefied tumefy\ntunned tun\ntunnelled tunnel\ntunnelling tunnel\ntunning tun\ntupped tup\ntupping tup\ntut-tutted tut-tut\ntut-tutting tut-tut\ntwigged twig\ntwigging twig\ntwinned twin\ntwinning twin\ntwitted twit\ntwitting twit\ntying tie\ntypesetting typeset\ntypewritten typewrite\ntypewrote typewrite\ntypified typify\nuglified uglify\nunbarred unbar\nunbarring unbar\nunbent unbend\nunbound unbind\nuncapped uncap\nuncapping uncap\nunclad unclothe\nunclogged unclog\nunclogging unclog\nunderbidding underbid\nunderbought underbuy\nundercutting undercut\nunderfed underfeed\nundergirt undergird\nundergone undergo\nunderlaid underlay\nunderlain underlie\nunderlay underlie\nunderletting underlet\nunderlying underlie\nunderpaid underpay\nunderpinned underpin\nunderpinning underpin\nunderpropped underprop\nunderpropping underprop\nundersetting underset\nundershot undershoot\nundersold undersell\nunderstood understand\nunderstudied understudy\nundertaken undertake\nundertook undertake\nunderwent undergo\nunderwritten underwrite\nunderwrote underwrite\nundid undo\nundone undo\nunfitted unfit\nunfitting unfit\nunfroze unfreeze\nunfrozen unfreeze\nunified unify\nunkennelled unkennel\nunkennelling unkennel\nunknitted unknit\nunknitting unknit\nunlaid unlay\nunlearnt unlearn\nunmade unmake\nunmanned unman\nunmanning unman\nunpegged unpeg\nunpegging unpeg\nunpinned unpin\nunpinning unpin\nunplugged unplug\nunplugging unplug\nunravelled unravel\nunravelling unravel\nunrigged unrig\nunrigging unrig\nunripped unrip\nunripping unrip\nunrove unreeve\nunsaid unsay\nunshipped unship\nunshipping unship\nunslung unsling\nunsnapped unsnap\nunsnapping unsnap\nunspoke unspeak\nunspoken unspeak\nunsteadied unsteady\nunstepped unstep\nunstepping unstep\nunstopped unstop\nunstopping unstop\nunstrung unstring\nunstuck unstick\nunswore unswear\nunsworn unswear\nuntaught unteach\nunthought unthink\nuntidied untidy\nuntrod untread\nuntrodden untread\nuntying untie\nunwound unwind\nunwrapped unwrap\nunwrapping unwrap\nunzipped unzip\nunzipping unzip\nupbuilt upbuild\nupheld uphold\nuphove upheave\nupped up\nuppercutting uppercut\nupping up\nuprisen uprise\nuprose uprise\nupsetting upset\nupsprang upspring\nupsprung upspring\nupswept upsweep\nupswollen upswell\nupswung upswing\nvagged vag\nvagging vag\nvaried vary\nvatted vat\nvatting vat\nverbified verbify\nverified verify\nversified versify\nvetted vet\nvetting vet\nvictualled victual\nvictualling victual\nvilified vilify\nvitrified vitrify\nvitriolled vitriol\nvitriolling vitriol\nvivified vivify\nvying vie\nwadded wad\nwaddied waddy\nwadding wad\nwadsetted wadset\nwadsetting wadset\nwagged wag\nwagging wag\nwanned wan\nwanning wan\nwarred war\nwarring war\nwas be\nwater-ski'd water-ski\nwaylaid waylay\nwearied weary\nweatherstripped weatherstrip\nweatherstripping weatherstrip\nwebbed web\nwebbing web\nwedded wed\nwedding wed\nweed weed\nwent go\nwent_deep go_deep\nwept weep\nwere be\nwetted wet\nwetting wet\nwhammed wham\nwhamming wham\nwhapped whap\nwhapping whap\nwhetted whet\nwhetting whet\nwhinnied whinny\nwhipped whip\nwhipping whip\nwhipsawn whipsaw\nwhirred whir\nwhirring whir\nwhistle-stopped whistle-stop\nwhistle-stopping whistle-stop\nwhizzed whiz\nwhizzes whiz\nwhizzing whiz\nwhopped whop\nwhopping whop\nwigged wig\nwigging wig\nwigwagged wigwag\nwigwagging wigwag\nwildcatted wildcat\nwildcatting wildcat\nwindow-shopped window-shop\nwindow-shopping window-shop\nwinning win\nwinterfed winterfeed\nwiredrawn wiredraw\nwiredrew wiredraw\nwithdrawn withdraw\nwithdrew withdraw\nwithheld withhold\nwithstood withstand\nwoke wake\nwoken wake\nwon win\nwonned won\nwonning won\nwore wear\nworn wear\nworried worry\nworshipped worship\nworshipping worship\nwound wind\nwove weave\nwoven weave\nwrapped wrap\nwrapping wrap\nwried wry\nwritten write\nwrote write\nwrought work\nwrung wring\nyakked yak\nyakking yak\nyapped yap\nyapping yap\nycleped clepe\nyclept clepe\nyenned yen\nyenning yen\nyodelled yodel\nyodelling yodel\nzapped zap\nzapping zap\nzigzagged zigzag\nzigzagging zigzag\nzipped zip\nzipping zip\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/data/smart_common_words.txt",
    "content": "reuters\nap\njan\nfeb\nmar\napr\nmay\njun\njul\naug\nsep\noct\nnov\ndec\ntech\nnews\nindex\nmon\ntue\nwed\nthu\nfri\nsat\n's\na\na's\nable\nabout\nabove\naccording\naccordingly\nacross\nactually\nafter\nafterwards\nagain\nagainst\nain't\nall\nallow\nallows\nalmost\nalone\nalong\nalready\nalso\nalthough\nalways\nam\namid\namong\namongst\nan\nand\nanother\nany\nanybody\nanyhow\nanyone\nanything\nanyway\nanyways\nanywhere\napart\nappear\nappreciate\nappropriate\nare\naren't\naround\nas\naside\nask\nasking\nassociated\nat\navailable\naway\nawfully\nb\nbe\nbecame\nbecause\nbecome\nbecomes\nbecoming\nbeen\nbefore\nbeforehand\nbehind\nbeing\nbelieve\nbelow\nbeside\nbesides\nbest\nbetter\nbetween\nbeyond\nboth\nbrief\nbut\nby\nc\nc'mon\nc's\ncame\ncan\ncan't\ncannot\ncant\ncause\ncauses\ncertain\ncertainly\nchanges\nclearly\nco\ncom\ncome\ncomes\nconcerning\nconsequently\nconsider\nconsidering\ncontain\ncontaining\ncontains\ncorresponding\ncould\ncouldn't\ncourse\ncurrently\nd\ndefinitely\ndescribed\ndespite\ndid\ndidn't\ndifferent\ndo\ndoes\ndoesn't\ndoing\ndon't\ndone\ndown\ndownwards\nduring\ne\neach\nedu\neg\ne.g.\neight\neither\nelse\nelsewhere\nenough\nentirely\nespecially\net\netc\netc.\neven\never\nevery\neverybody\neveryone\neverything\neverywhere\nex\nexactly\nexample\nexcept\nf\nfar\nfew\nfifth\nfive\nfollowed\nfollowing\nfollows\nfor\nformer\nformerly\nforth\nfour\nfrom\nfurther\nfurthermore\ng\nget\ngets\ngetting\ngiven\ngives\ngo\ngoes\ngoing\ngone\ngot\ngotten\ngreetings\nh\nhad\nhadn't\nhappens\nhardly\nhas\nhasn't\nhave\nhaven't\nhaving\nhe\nhe's\nhello\nhelp\nhence\nher\nhere\nhere's\nhereafter\nhereby\nherein\nhereupon\nhers\nherself\nhi\nhim\nhimself\nhis\nhither\nhopefully\nhow\nhowbeit\nhowever\ni\ni'd\ni'll\ni'm\ni've\nie\ni.e.\nif\nignored\nimmediate\nin\ninasmuch\ninc\nindeed\nindicate\nindicated\nindicates\ninner\ninsofar\ninstead\ninto\ninward\nis\nisn't\nit\nit'd\nit'll\nit's\nits\nitself\nj\njust\nk\nkeep\nkeeps\nkept\nknow\nknows\nknown\nl\nlately\nlater\nlatter\nlatterly\nleast\nless\nlest\nlet\nlet's\nlike\nliked\nlikely\nlittle\nlook\nlooking\nlooks\nltd\nm\nmainly\nmany\nmay\nmaybe\nme\nmean\nmeanwhile\nmerely\nmight\nmore\nmoreover\nmost\nmostly\nmr.\nms.\nmuch\nmust\nmy\nmyself\nn\nnamely\nnd\nnear\nnearly\nnecessary\nneed\nneeds\nneither\nnever\nnevertheless\nnew\nnext\nnine\nno\nnobody\nnon\nnone\nnoone\nnor\nnormally\nnot\nnothing\nnovel\nnow\nnowhere\no\nobviously\nof\noff\noften\noh\nok\nokay\nold\non\nonce\none\nones\nonly\nonto\nor\nother\nothers\notherwise\nought\nour\nours\nourselves\nout\noutside\nover\noverall\nown\np\nparticular\nparticularly\nper\nperhaps\nplaced\nplease\nplus\npossible\npresumably\nprobably\nprovides\nq\nque\nquite\nqv\nr\nrather\nrd\nre\nreally\nreasonably\nregarding\nregardless\nregards\nrelatively\nrespectively\nright\ns\nsaid\nsame\nsaw\nsay\nsaying\nsays\nsecond\nsecondly\nsee\nseeing\nseem\nseemed\nseeming\nseems\nseen\nself\nselves\nsensible\nsent\nserious\nseriously\nseven\nseveral\nshall\nshe\nshould\nshouldn't\nsince\nsix\nso\nsome\nsomebody\nsomehow\nsomeone\nsomething\nsometime\nsometimes\nsomewhat\nsomewhere\nsoon\nsorry\nspecified\nspecify\nspecifying\nstill\nsub\nsuch\nsup\nsure\nt\nt's\ntake\ntaken\ntell\ntends\nth\nthan\nthank\nthanks\nthanx\nthat\nthat's\nthats\nthe\ntheir\ntheirs\nthem\nthemselves\nthen\nthence\nthere\nthere's\nthereafter\nthereby\ntherefore\ntherein\ntheres\nthereupon\nthese\nthey\nthey'd\nthey'll\nthey're\nthey've\nthink\nthird\nthis\nthorough\nthoroughly\nthose\nthough\nthree\nthrough\nthroughout\nthru\nthus\nto\ntogether\ntoo\ntook\ntoward\ntowards\ntried\ntries\ntruly\ntry\ntrying\ntwice\ntwo\nu\nun\nunder\nunfortunately\nunless\nunlikely\nuntil\nunto\nup\nupon\nus\nuse\nused\nuseful\nuses\nusing\nusually\nuucp\nv\nvalue\nvarious\nvery\nvia\nviz\nvs\nw\nwant\nwants\nwas\nwasn't\nway\nwe\nwe'd\nwe'll\nwe're\nwe've\nwelcome\nwell\nwent\nwere\nweren't\nwhat\nwhat's\nwhatever\nwhen\nwhence\nwhenever\nwhere\nwhere's\nwhereafter\nwhereas\nwhereby\nwherein\nwhereupon\nwherever\nwhether\nwhich\nwhile\nwhither\nwho\nwho's\nwhoever\nwhole\nwhom\nwhose\nwhy\nwill\nwilling\nwish\nwith\nwithin\nwithout\nwon't\nwonder\nwould\nwould\nwouldn't\nx\ny\nyes\nyet\nyou\nyou'd\nyou'll\nyou're\nyou've\nyour\nyours\nyourself\nyourselves\nz\nzero\n"
  },
  {
    "path": "files2rouge/RELEASE-1.5.5/runROUGE-test.pl",
    "content": "#!/usr/bin/perl -w\nuse Cwd;\n$curdir=getcwd;\n$ROUGE=\"../ROUGE-1.5.5.pl\";\nchdir(\"sample-test\");\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m-s.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m-s.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m-s.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -3 HM -z SIMPLE DUC2002-BE-F.in.26.lst 26 > ../sample-output/DUC2002-BE-F.in.26.lst.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -3 HM DUC2002-BE-F.in.26.simple.xml 26 > ../sample-output/DUC2002-BE-F.in.26.simple.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -3 HM -z SIMPLE DUC2002-BE-L.in.26.lst 26 > ../sample-output/DUC2002-BE-L.in.26.lst.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -3 HM DUC2002-BE-L.in.26.simple.xml 26 > ../sample-output/DUC2002-BE-L.in.26.simple.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -n 4 -z SPL DUC2002-ROUGE.in.26.spl.lst 26 > ../sample-output/DUC2002-ROUGE.in.26.spl.lst.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\n$cmd=\"$ROUGE -e ../data -n 4 DUC2002-ROUGE.in.26.spl.xml 26 > ../sample-output/DUC2002-ROUGE.in.26.spl.out\";\nprint $cmd,\"\\n\";\nsystem($cmd);\nchdir($curdir);\n"
  },
  {
    "path": "files2rouge/__init__.py",
    "content": "from __future__ import absolute_import\nfrom files2rouge.files2rouge import run\nfrom files2rouge.files2rouge import main\nfrom files2rouge.settings import Settings\n\n__version__ = \"2.1.0\"\n__all__ = [absolute_import, run, main, Settings]\n"
  },
  {
    "path": "files2rouge/files2rouge.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n    ROUGE scoring for each lines from `ref_path` and `summ_path`\n    in parrallel.\n\n    Sentences are identified by the `--eos` flag (by default \".\")\n    One can save score to a file using `--saveto`\n\n    Usage:\n        files2rouge -h\n\n\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import print_function, division\nfrom files2rouge import settings\nfrom files2rouge import utils\nfrom time import time\nimport os\nimport pyrouge\nimport tempfile\nimport logging\nimport argparse\n\n\nDEFAULT_ROUGE_N = 2\n\n\ndef run(summ_path,\n        ref_path,\n        rouge_args=None,\n        verbose=False,\n        saveto=None,\n        rouge_n=DEFAULT_ROUGE_N,\n        no_rouge_l=False,\n        eos=\".\",\n        ignore_empty_reference=False,\n        ignore_empty_summary=False,\n        stemming=True):\n\n    if rouge_args is not None:\n        if rouge_n != DEFAULT_ROUGE_N:\n            raise ValueError(\"'rouge_n' should not be set with 'rouge_args'\")\n\n        if no_rouge_l:\n            raise ValueError(\n                \"'no_rouge_l' should not be set with 'rouge_args'\")\n\n    s = settings.Settings()\n    s._load()\n    stime = time()\n\n    with tempfile.TemporaryDirectory() as dirpath:\n        sys_root, model_root = [os.path.join(dirpath, _)\n                                for _ in [\"system\", \"model\"]]\n\n        print(\"Preparing documents...\", end=\" \")\n        utils.mkdirs([sys_root, model_root])\n        ignored = utils.split_files(model_path=ref_path,\n                                    system_path=summ_path,\n                                    model_dir=model_root,\n                                    system_dir=sys_root,\n                                    eos=eos,\n                                    ignore_empty_reference=ignore_empty_reference,\n                                    ignore_empty_summary=ignore_empty_summary)\n        print(\"%d line(s) ignored\" % len(ignored))\n        print(\"Running ROUGE...\")\n        log_level = logging.ERROR if not verbose else None\n        r = pyrouge.Rouge155(rouge_dir=os.path.dirname(s.data['ROUGE_path']),\n                             log_level=log_level,\n                             stemming=stemming)\n        r.system_dir = sys_root\n        r.model_dir = model_root\n        r.system_filename_pattern = r's.(\\d+).txt'\n        r.model_filename_pattern = 'm.[A-Z].#ID#.txt'\n        data_arg = \"-e %s\" % s.data['ROUGE_data']\n\n        if not rouge_args:\n            rouge_args = [\n                '-c', 95,\n                '-r', 1000,\n                '-n', rouge_n,\n                '-a']\n            if no_rouge_l:\n                rouge_args.append(\"-x\")\n\n            rouge_args_str = \" \".join([str(_) for _ in rouge_args])\n        else:\n            rouge_args_str = rouge_args\n        rouge_args_str = \"%s %s\" % (data_arg, rouge_args_str)\n\n        output = r.convert_and_evaluate(rouge_args=rouge_args_str)\n\n    if saveto is not None:\n        saveto = open(saveto, 'w')\n\n    utils.tee(saveto, output)\n    print(\"Elapsed time: %.3f seconds\" % (time() - stime))\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\"Calculating ROUGE score between two files (line-by-line)\")\n    parser.add_argument(\"reference\", help=\"Path of references file\")\n    parser.add_argument(\"summary\", help=\"Path of summary file\")\n    parser.add_argument('-v', '--verbose', action=\"store_true\",\n                        help=\"\"\"Prints ROUGE logs\"\"\")\n    parser.add_argument('-n', '--rouge_n', type=int, default=DEFAULT_ROUGE_N,\n                        help=\"Maximum n_gram size to consider\")\n    parser.add_argument('-nol', '--no_rouge_l', action=\"store_true\",\n                        help=\"Do not calculate ROUGE-L\")\n    parser.add_argument('-a', '--args', help=\"ROUGE Arguments\")\n    parser.add_argument('-s', '--saveto', dest=\"saveto\",\n                        help=\"File to save scores\")\n    parser.add_argument('-e', '--eos', dest=\"eos\", default='.',\n                        help=\"\"\"End of sentence separator (for multisentence).\n                            Default: \\\".\\\" \"\"\")\n    parser.add_argument(\"-m\", \"--stemming\", action=\"store_true\",\n                        help=\"DEPRECATED: stemming is now default behavior\")\n    parser.add_argument(\"-nm\", \"--no_stemming\", action=\"store_true\",\n                        help=\"Switch off stemming\")\n    parser.add_argument(\"-ir\", \"--ignore_empty_reference\", action=\"store_true\")\n    parser.add_argument(\"-is\", \"--ignore_empty_summary\", action=\"store_true\")\n    args = parser.parse_args()\n\n    if args.stemming:\n        raise ValueError(\n            \"\"\"files2rouge uses stemming by default so --stemming is\n            deprecated. You can turn it off with -nm/--no_stemming\"\"\")\n\n    run(args.summary,\n        args.reference,\n        rouge_args=args.args,\n        rouge_n=args.rouge_n,\n        no_rouge_l=args.no_rouge_l,\n        verbose=args.verbose,\n        saveto=args.saveto,\n        eos=args.eos,\n        ignore_empty_reference=args.ignore_empty_reference,\n        ignore_empty_summary=args.ignore_empty_summary,\n        stemming=not args.no_stemming)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "files2rouge/settings.py",
    "content": "import os\nimport json\n\nPATHS = ['ROUGE_path', 'ROUGE_data']\nPARAMS = PATHS + []\n\n\ndef _default_path():\n    _dir, _filename = os.path.split(__file__)\n    return os.path.join(_dir, 'settings.json')\n\n\nclass Settings:\n\n    def __init__(self, path=None):\n        self.path = _default_path() if path is None else path\n\n    def _load(self):\n        try:\n            with open(self.path, 'r') as f:\n                data = json.load(f)\n            self.set_data(data)\n        except IOError:\n            print(\n                \"Can't load ROUGE settings in '%s'. Check that the file \"\n                \"exists or initialize it with 'setup_rouge.py'\" % self.path)\n            exit()\n\n    def _generate(self, data):\n        self.set_data(data)\n        with open(self.path, 'w') as f:\n            json.dump(data, f, indent=2)\n\n    def set_data(self, data):\n        \"\"\"Check & set data to `data`\n        \"\"\"\n        for param in PARAMS:\n            if param not in data:\n                raise ValueError('Missing parameter %d in data' % param)\n\n        for path_key in PATHS:\n            path = data[path_key]\n            if not os.path.exists(path):\n                raise ValueError(\"Path does not exist %s\" % path)\n        self.data = data\n"
  },
  {
    "path": "files2rouge/utils.py",
    "content": "#!/usr/bin/env python\nfrom __future__ import print_function\nimport os\n\n\ndef mkdir(path):\n    os.mkdir(path)\n\n\ndef mkdirs(paths):\n    for path in paths:\n        mkdir(path)\n\n\ndef line_count(path):\n    with open(path) as f:\n        for i, line in enumerate(f):\n            pass\n    n = i + 1\n    return n\n\n\ndef tee(saveto, *args, **kwargs):\n    \"\"\"Mimic the tee command, write on both stdout and file\n    \"\"\"\n    print(*args, **kwargs)\n    if saveto is not None:\n        print(file=saveto, *args, **kwargs)\n\n\ndef split_files(model_path, system_path, model_dir, system_dir,\n                ignore_empty_reference=False,\n                ignore_empty_summary=False,\n                eos=\".\"):\n    def outputs(line, f):\n        split_sen = (\" %s\\n\" % eos).join(line.split(\" %s\" % eos))\n        print(split_sen, end=\"\", file=f)\n\n    # First, assert line counts match\n    model_count = line_count(model_path)\n    system_count = line_count(system_path)\n    if model_count != system_count:\n        raise ValueError(\"Model and System line counts must match, %d != %d\"\n                         % (model_count, system_count))\n\n    lines_to_ignore = []\n    with open(model_path) as fmodel:\n        with open(system_path) as fsystem:\n            for i, (mod_line, sys_line) in enumerate(zip(fmodel, fsystem)):\n                mod_line = mod_line.strip()\n                sys_line = sys_line.strip()\n\n                if mod_line == \"\":\n                    if ignore_empty_reference:\n                        lines_to_ignore.append(i + 1)\n                        continue\n                    else:\n                        raise ValueError(\"Empty reference at line %d.\"\n                                         \" Use `--ignore_empty_reference` to ignore it\"\n                                         % (i + 1))\n\n                if sys_line == \"\":\n                    if ignore_empty_summary:\n                        lines_to_ignore.append(i + 1)\n                        continue\n                    else:\n                        raise ValueError(\"Empty summary at line %d.\"\n                                         \" Use `--ignore_empty_summary` to ignore it\"\n                                         % (i + 1))\n                with open(\"%s/m.A.%d.txt\" % (model_dir, i), \"w\") as f:\n                    outputs(mod_line, f)\n\n                with open(\"%s/s.%d.txt\" % (system_dir, i), \"w\") as f:\n                    outputs(sys_line, f)\n    return lines_to_ignore\n"
  },
  {
    "path": "setup.py",
    "content": "from setuptools import setup, find_packages\n\nversion = \"2.1.0\"\nsetup(\n    name=\"files2rouge\",\n    version=version,\n    description=\"Calculating ROUGE score between two files (line-by-line)\",\n    url=\"http://github.com/pltrdy/files2rouge\",\n    download_url=\"https://github.com/pltrdy/files2rouge/archive/%s.tar.gz\"\n                 % version,\n    author=\"pltrdy\",\n    author_email=\"pltrdy@gmail.com\",\n    keywords=[\"NL\", \"CL\", \"natural language processing\",\n              \"computational linguistics\", \"summarization\"],\n    packages=find_packages(),\n    classifiers=[\n        \"Intended Audience :: Science/Research\",\n        \"Programming Language :: Python :: 3\",\n        \"Topic :: Text Processing :: Linguistic\"\n    ],\n    license=\"LICENCE.txt\",\n    long_description=open(\"README.md\").read(),\n\n    entry_points={\n        'console_scripts': [\n            'files2rouge=files2rouge:main'\n        ]\n    },\n    install_requires=[\n    ],\n    include_package_data=True,\n)\n"
  },
  {
    "path": "setup_rouge.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n    Utility to copy ROUGE script.\n    It has to be run before `setup.py`\n\n\"\"\"\nimport os\nimport shutil\n\nfrom files2rouge import settings\nfrom six.moves import input\n\n\ndef copy_rouge():\n    if 'HOME' not in os.environ:\n        home = os.environ['HOMEPATH']\n    else:\n        home = os.environ['HOME']\n\n    src_rouge_root = \"./files2rouge/RELEASE-1.5.5/\"\n\n    default_root = os.path.join(home, '.files2rouge/')\n\n    print(\"files2rouge uses scripts and tools that will not be stored with \"\n          \"the python package\")\n    path = input(\n        \"where do you want to save it? [default: %s]\" % default_root)\n\n    if path == \"\":\n        path = default_root\n\n    rouge_data = os.path.join(path, \"data\")\n    rouge_path = os.path.join(path, \"ROUGE-1.5.5.pl\")\n\n    print(\"Copying '%s' to '%s'\" % (src_rouge_root, path))\n    shutil.copytree(src_rouge_root, path)\n\n    return {\"ROUGE_path\": rouge_path, \"ROUGE_data\": rouge_data}\n\n\nconf_path = \"./files2rouge/settings.json\"\ns = settings.Settings(path=conf_path)\ndata = copy_rouge()\ns._generate(data)\n"
  }
]