Clover coverage report - QedeqKernelSe Coverage Report
Coverage timestamp: Do Mrz 27 2008 21:46:26 CET
file stats: LOC: 562   Methods: 60
NCLOC: 453   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Qedeq2Xml.java 75% 98% 100% 92,5%
coverage coverage
 1    /* $Id: Qedeq2Xml.java,v 1.7 2008/03/27 05:16:25 m31 Exp $
 2    *
 3    * This file is part of the project "Hilbert II" - http://www.qedeq.org
 4    *
 5    * Copyright 2000-2008, Michael Meyling <mime@qedeq.org>.
 6    *
 7    * "Hilbert II" is free software; you can redistribute
 8    * it and/or modify it under the terms of the GNU General Public
 9    * License as published by the Free Software Foundation; either
 10    * version 2 of the License, or (at your option) any later version.
 11    *
 12    * This program is distributed in the hope that it will be useful,
 13    * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15    * GNU General Public License for more details.
 16    */
 17   
 18    package org.qedeq.kernel.latex;
 19   
 20    import java.io.IOException;
 21   
 22    import org.qedeq.kernel.base.list.ElementList;
 23    import org.qedeq.kernel.base.module.Author;
 24    import org.qedeq.kernel.base.module.AuthorList;
 25    import org.qedeq.kernel.base.module.Axiom;
 26    import org.qedeq.kernel.base.module.Chapter;
 27    import org.qedeq.kernel.base.module.Formula;
 28    import org.qedeq.kernel.base.module.FunctionDefinition;
 29    import org.qedeq.kernel.base.module.Header;
 30    import org.qedeq.kernel.base.module.Import;
 31    import org.qedeq.kernel.base.module.ImportList;
 32    import org.qedeq.kernel.base.module.Latex;
 33    import org.qedeq.kernel.base.module.LatexList;
 34    import org.qedeq.kernel.base.module.LinkList;
 35    import org.qedeq.kernel.base.module.LiteratureItem;
 36    import org.qedeq.kernel.base.module.LiteratureItemList;
 37    import org.qedeq.kernel.base.module.Location;
 38    import org.qedeq.kernel.base.module.LocationList;
 39    import org.qedeq.kernel.base.module.Node;
 40    import org.qedeq.kernel.base.module.PredicateDefinition;
 41    import org.qedeq.kernel.base.module.Proof;
 42    import org.qedeq.kernel.base.module.Proposition;
 43    import org.qedeq.kernel.base.module.Qedeq;
 44    import org.qedeq.kernel.base.module.Rule;
 45    import org.qedeq.kernel.base.module.Section;
 46    import org.qedeq.kernel.base.module.Specification;
 47    import org.qedeq.kernel.base.module.Subsection;
 48    import org.qedeq.kernel.base.module.SubsectionList;
 49    import org.qedeq.kernel.base.module.Term;
 50    import org.qedeq.kernel.base.module.UsedByList;
 51    import org.qedeq.kernel.base.module.VariableList;
 52    import org.qedeq.kernel.bo.control.ControlVisitor;
 53    import org.qedeq.kernel.bo.control.KernelQedeqBo;
 54    import org.qedeq.kernel.common.SourceFileExceptionList;
 55    import org.qedeq.kernel.context.KernelContext;
 56    import org.qedeq.kernel.utility.TextOutput;
 57   
 58   
 59    /**
 60    * This class prints a QEDEQ module in XML format in an output stream.
 61    *
 62    * TODO mime 20080309: escape XML attributes like &gt;, &amp; and other.
 63    * See {@link org.qedeq.kernel.utility.StringUtility#decodeXmlMarkup(StringBuffer)}.
 64    *
 65    * @version $Revision: 1.7 $
 66    * @author Michael Meyling
 67    */
 68    public final class Qedeq2Xml extends ControlVisitor {
 69   
 70    /** Output goes here. */
 71    private TextOutput printer;
 72   
 73    /**
 74    * Constructor.
 75    *
 76    * @param bo QEDEQ BO.
 77    * @param printer Print herein.
 78    */
 79  3 private Qedeq2Xml(final KernelQedeqBo bo, final TextOutput printer) {
 80  3 super(bo);
 81  3 this.printer = printer;
 82    }
 83   
 84    /**
 85    * Prints a XML representation of given QEDEQ module into a given output stream.
 86    *
 87    * @param bo BO QEDEQ module object.
 88    * @param printer Print herein.
 89    * @throws SourceFileExceptionList Major problem occurred.
 90    * @throws IOException
 91    */
 92  3 public static void print(final KernelQedeqBo bo, final TextOutput printer) throws
 93    SourceFileExceptionList, IOException {
 94  3 final Qedeq2Xml converter = new Qedeq2Xml(bo, printer);
 95  3 try {
 96  3 converter.traverse();
 97    } finally {
 98  3 printer.flush();
 99    }
 100  3 if (printer.checkError()) {
 101  0 throw printer.getError();
 102    }
 103    }
 104   
 105  3 public final void visitEnter(final Qedeq qedeq) {
 106  3 printer.levelPrintln("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
 107  3 printer.levelPrintln("<QEDEQ");
 108  3 printer.levelPrintln(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
 109  3 printer.levelPrintln(" xsi:noNamespaceSchemaLocation=\"http://www.qedeq.org/"
 110    + KernelContext.getInstance().getKernelVersionDirectory() + "/xml/qedeq.xsd\">");
 111  3 printer.pushLevel();
 112    }
 113   
 114  3 public final void visitLeave(final Qedeq qedeq) {
 115  3 printer.popLevel();
 116  3 printer.levelPrintln("</QEDEQ>");
 117    }
 118   
 119  3 public void visitEnter(final Header header) {
 120  3 printer.levelPrint("<HEADER");
 121  3 if (header.getEmail() != null) {
 122  3 printer.print(" email=\"" + header.getEmail() + "\"");
 123    }
 124  3 printer.println(">");
 125  3 printer.pushLevel();
 126    }
 127   
 128  3 public void visitLeave(final Header header) {
 129  3 printer.popLevel();
 130  3 printer.levelPrintln("</HEADER>");
 131    }
 132   
 133  6 public void visitEnter(final Specification specification) {
 134  6 printer.levelPrint("<SPECIFICATION");
 135  6 if (specification.getName() != null) {
 136  6 printer.print(" name=\"" + specification.getName() + "\"");
 137    }
 138  6 if (specification.getName() != null) {
 139  6 printer.print(" ruleVersion=\"" + specification.getRuleVersion() + "\"");
 140    }
 141  6 printer.println(">");
 142  6 printer.pushLevel();
 143    }
 144   
 145  6 public void visitLeave(final Specification specification) {
 146  6 printer.popLevel();
 147  6 printer.levelPrintln("</SPECIFICATION>");
 148    }
 149   
 150  318 public void visitEnter(final LatexList latexList) {
 151  318 final String last = getCurrentContext().getLocationWithinModule();
 152  318 if (last.endsWith(".getTitle()")) {
 153  98 printer.levelPrintln("<TITLE>");
 154  220 } else if (last.endsWith(".getSummary()")) {
 155  3 printer.levelPrintln("<ABSTRACT>");
 156  217 } else if (last.endsWith(".getIntroduction()")) {
 157  47 printer.levelPrintln("<INTRODUCTION>");
 158  170 } else if (last.endsWith(".getName()")) {
 159  38 printer.levelPrintln("<NAME>");
 160  132 } else if (last.endsWith(".getPrecedingText()")) {
 161  92 printer.levelPrintln("<PRECEDING>");
 162  40 } else if (last.endsWith(".getSucceedingText()")) {
 163  19 printer.levelPrintln("<SUCCEEDING>");
 164  21 } else if (last.endsWith(".getLatex()")) {
 165  11 printer.levelPrintln("<TEXT>");
 166  10 } else if (last.endsWith(".getDescription()")) {
 167  2 printer.levelPrintln("<DESCRIPTION>");
 168    }
 169  318 printer.pushLevel();
 170    }
 171   
 172  318 public void visitLeave(final LatexList latexList) {
 173  318 printer.popLevel();
 174  318 final String last = getCurrentContext().getLocationWithinModule();
 175  318 if (last.endsWith(".getTitle()")) {
 176  98 printer.levelPrintln("</TITLE>");
 177  220 } else if (last.endsWith(".getSummary()")) {
 178  3 printer.levelPrintln("</ABSTRACT>");
 179  217 } else if (last.endsWith(".getIntroduction()")) {
 180  47 printer.levelPrintln("</INTRODUCTION>");
 181  170 } else if (last.endsWith(".getName()")) {
 182  38 printer.levelPrintln("</NAME>");
 183  132 } else if (last.endsWith(".getPrecedingText()")) {
 184  92 printer.levelPrintln("</PRECEDING>");
 185  40 } else if (last.endsWith(".getSucceedingText()")) {
 186  19 printer.levelPrintln("</SUCCEEDING>");
 187  21 } else if (last.endsWith(".getLatex()")) {
 188  11 printer.levelPrintln("</TEXT>");
 189  10 } else if (last.endsWith(".getDescription()")) {
 190  2 printer.levelPrintln("</DESCRIPTION>");
 191    }
 192    }
 193   
 194  575 public void visitEnter(final Latex latex) {
 195  575 printer.levelPrint("<LATEX");
 196  575 if (latex.getLanguage() != null) {
 197  522 printer.print(" language=\"" + latex.getLanguage() + "\"");
 198    }
 199  575 printer.println(">");
 200  575 if (latex.getLatex() != null) {
 201  573 printer.pushLevel();
 202  573 printer.levelPrintln("<![CDATA[");
 203  573 printer.pushLevel();
 204  573 printer.levelPrintln(latex.getLatex());
 205    }
 206    }
 207   
 208  575 public void visitLeave(final Latex latex) {
 209  575 if (latex.getLatex() != null) {
 210  573 printer.popLevel();
 211  573 printer.levelPrintln("]]>");
 212  573 printer.popLevel();
 213    }
 214  575 printer.levelPrintln("</LATEX>");
 215    }
 216   
 217  6 public void visitEnter(final LocationList locationList) {
 218  6 printer.levelPrintln("<LOCATIONS>");
 219  6 printer.pushLevel();
 220    }
 221   
 222  6 public void visitLeave(final LocationList locationList) {
 223  6 printer.popLevel();
 224  6 printer.levelPrintln("</LOCATIONS>");
 225    }
 226   
 227  7 public void visitEnter(final Location location) {
 228  7 printer.levelPrint("<LOCATION");
 229  7 if (location.getLocation() != null) {
 230  7 printer.print(" value=\"" + location.getLocation() + "\"");
 231    }
 232  7 printer.println(" />");
 233    }
 234   
 235  3 public void visitEnter(final AuthorList authorList) {
 236  3 printer.levelPrintln("<AUTHORS>");
 237  3 printer.pushLevel();
 238    }
 239   
 240  3 public void visitLeave(final AuthorList authorList) {
 241  3 printer.popLevel();
 242  3 printer.levelPrintln("</AUTHORS>");
 243    }
 244   
 245  3 public void visitEnter(final Author author) {
 246  3 printer.levelPrint("<AUTHOR");
 247  3 if (author.getEmail() != null) {
 248  3 printer.print(" email=\"" + author.getEmail() + "\"");
 249    }
 250  3 printer.println(">");
 251  3 printer.pushLevel();
 252  3 if (author.getName() != null) {
 253  3 printer.levelPrintln("<NAME>");
 254    }
 255  3 printer.pushLevel();
 256    }
 257   
 258  3 public void visitLeave(final Author author) {
 259  3 printer.popLevel();
 260  3 if (author.getName() != null) {
 261  3 printer.levelPrintln("</NAME>");
 262    }
 263  3 printer.popLevel();
 264  3 printer.levelPrintln("</AUTHOR>");
 265    }
 266   
 267  2 public void visitEnter(final ImportList importList) {
 268  2 printer.levelPrintln("<IMPORTS>");
 269  2 printer.pushLevel();
 270    }
 271   
 272  2 public void visitLeave(final ImportList importList) {
 273  2 printer.popLevel();
 274  2 printer.levelPrintln("</IMPORTS>");
 275    }
 276   
 277  2 public void visitEnter(final Import imp) {
 278  2 printer.levelPrint("<IMPORT");
 279  2 if (imp.getLabel() != null) {
 280  2 printer.print(" label=\"" + imp.getLabel() + "\"");
 281    }
 282  2 printer.println(">");
 283  2 printer.pushLevel();
 284    }
 285   
 286  2 public void visitLeave(final Import imp) {
 287  2 printer.popLevel();
 288  2 printer.levelPrintln("</IMPORT>");
 289    }
 290   
 291  1 public void visitEnter(final UsedByList usedByList) {
 292  1 printer.levelPrintln("<USEDBY>");
 293  1 printer.pushLevel();
 294    }
 295   
 296  1 public void visitLeave(final UsedByList usedByList) {
 297  1 printer.popLevel();
 298  1 printer.levelPrintln("</USEDBY>");
 299    }
 300   
 301  16 public void visitEnter(final Chapter chapter) {
 302  16 printer.levelPrint("<CHAPTER");
 303  16 if (chapter.getNoNumber() != null) {
 304  4 printer.print(" noNumber=\"" + chapter.getNoNumber().booleanValue() + "\"");
 305    }
 306  16 printer.println(">");
 307  16 printer.pushLevel();
 308    }
 309   
 310  16 public void visitLeave(final Chapter chapter) {
 311  16 printer.popLevel();
 312  16 printer.levelPrintln("</CHAPTER>");
 313    }
 314   
 315  31 public void visitEnter(final Section section) {
 316  31 printer.levelPrint("<SECTION");
 317  31 if (section.getNoNumber() != null) {
 318  0 printer.print(" noNumber=\"" + section.getNoNumber().booleanValue() + "\"");
 319    }
 320  31 printer.println(">");
 321  31 printer.pushLevel();
 322    }
 323   
 324  31 public void visitLeave(final Section section) {
 325  31 printer.popLevel();
 326  31 printer.levelPrintln("</SECTION>");
 327    }
 328   
 329  17 public void visitEnter(final SubsectionList subsectionList) {
 330  17 printer.levelPrintln("<SUBSECTIONS>");
 331  17 printer.pushLevel();
 332    }
 333   
 334  17 public void visitLeave(final SubsectionList subsectionList) {
 335  17 printer.popLevel();
 336  17 printer.levelPrintln("</SUBSECTIONS>");
 337    }
 338   
 339  11 public void visitEnter(final Subsection subsection) {
 340  11 printer.levelPrint("<SUBSECTION");
 341  11 if (subsection.getId() != null) {
 342  0 printer.print(" id=\"" + subsection.getId() + "\"");
 343    }
 344  11 if (subsection.getLevel() != null) {
 345  0 printer.print(" level=\"" + subsection.getLevel() + "\"");
 346    }
 347  11 printer.println(">");
 348  11 printer.pushLevel();
 349    }
 350   
 351  11 public void visitLeave(final Subsection subsection) {
 352  11 printer.popLevel();
 353  11 printer.levelPrintln("</SUBSECTION>");
 354    }
 355   
 356  92 public void visitEnter(final Node node) {
 357  92 printer.levelPrint("<NODE");
 358  92 if (node.getId() != null) {
 359  92 printer.print(" id=\"" + node.getId() + "\"");
 360    }
 361  92 if (node.getLevel() != null) {
 362  72 printer.print(" level=\"" + node.getLevel() + "\"");
 363    }
 364  92 printer.println(">");
 365  92 printer.pushLevel();
 366    }
 367   
 368  92 public void visitLeave(final Node node) {
 369  92 printer.popLevel();
 370  92 printer.levelPrintln("</NODE>");
 371    }
 372   
 373  12 public void visitEnter(final Axiom axiom) {
 374  12 printer.levelPrintln("<AXIOM>");
 375  12 printer.pushLevel();
 376    }
 377   
 378  12 public void visitLeave(final Axiom axiom) {
 379  12 printer.popLevel();
 380  12 printer.levelPrintln("</AXIOM>");
 381    }
 382   
 383  54 public void visitEnter(final Proposition proposition) {
 384  54 printer.levelPrintln("<THEOREM>");
 385  54 printer.pushLevel();
 386    }
 387   
 388  54 public void visitLeave(final Proposition proposition) {
 389  54 printer.popLevel();
 390  54 printer.levelPrintln("</THEOREM>");
 391    }
 392   
 393  5 public void visitEnter(final Proof proof) {
 394  5 printer.levelPrint("<PROOF");
 395  5 if (proof.getKind() != null) {
 396  5 printer.print(" kind=\"" + proof.getKind() + "\"");
 397    }
 398  5 if (proof.getLevel() != null) {
 399  5 printer.print(" level=\"" + proof.getLevel() + "\"");
 400    }
 401  5 printer.println(">");
 402    }
 403   
 404  5 public void visitLeave(final Proof proof) {
 405  5 printer.levelPrintln("</PROOF>");
 406    }
 407   
 408  9 public void visitEnter(final PredicateDefinition definition) {
 409  9 printer.levelPrint("<DEFINITION_PREDICATE");
 410  9 if (definition.getArgumentNumber() != null) {
 411  9 printer.print(" arguments=\"" + definition.getArgumentNumber() + "\"");
 412    }
 413  9 if (definition.getName() != null) {
 414  9 printer.print(" name=\"" + definition.getName() + "\"");
 415    }
 416  9 printer.println(">");
 417  9 printer.pushLevel();
 418  9 if (definition.getLatexPattern() != null) {
 419  9 printer.levelPrintln("<LATEXPATTERN>" + definition.getLatexPattern()
 420    + "</LATEXPATTERN>");
 421    }
 422    }
 423   
 424  9 public void visitLeave(final PredicateDefinition definition) {
 425  9 printer.popLevel();
 426  9 printer.levelPrintln("</DEFINITION_PREDICATE>");
 427    }
 428   
 429  16 public void visitEnter(final FunctionDefinition definition) {
 430  16 printer.levelPrint("<DEFINITION_FUNCTION");
 431  16 if (definition.getArgumentNumber() != null) {
 432  16 printer.print(" arguments=\"" + definition.getArgumentNumber() + "\"");
 433    }
 434  16 if (definition.getName() != null) {
 435  16 printer.print(" name=\"" + definition.getName() + "\"");
 436    }
 437  16 printer.println(">");
 438  16 printer.pushLevel();
 439  16 if (definition.getLatexPattern() != null) {
 440  16 printer.levelPrintln("<LATEXPATTERN>" + definition.getLatexPattern()
 441    + "</LATEXPATTERN>");
 442    }
 443    }
 444   
 445  16 public void visitLeave(final FunctionDefinition definition) {
 446  16 printer.popLevel();
 447  16 printer.levelPrintln("</DEFINITION_FUNCTION>");
 448    }
 449   
 450  1 public void visitEnter(final Rule rule) {
 451  1 printer.levelPrint("<RULE");
 452  1 if (rule.getName() != null) {
 453  1 printer.print(" name=\"" + rule.getName() + "\"");
 454    }
 455  1 printer.println(">");
 456  1 printer.pushLevel();
 457    }
 458   
 459  1 public void visitLeave(final Rule rule) {
 460  1 printer.popLevel();
 461  1 printer.levelPrintln("</RULE>");
 462    }
 463   
 464  1 public void visitEnter(final LinkList linkList) {
 465  1 for (int i = 0; i < linkList.size(); i++) {
 466  1 printer.levelPrint("<LINK");
 467  1 if (linkList.get(i) != null) {
 468  1 printer.print(" id=\"" + linkList.get(i) + "\"");
 469    }
 470  1 printer.println("/>");
 471    };
 472    }
 473   
 474  73 public void visitEnter(final Formula formula) {
 475  73 printer.levelPrintln("<FORMULA>");
 476  73 printer.pushLevel();
 477    }
 478   
 479  73 public void visitLeave(final Formula formula) {
 480  73 printer.popLevel();
 481  73 printer.levelPrintln("</FORMULA>");
 482    }
 483   
 484  16 public void visitEnter(final Term term) {
 485  16 printer.levelPrintln("<TERM>");
 486  16 printer.pushLevel();
 487    }
 488   
 489  16 public void visitLeave(final Term term) {
 490  16 printer.popLevel();
 491  16 printer.levelPrintln("</TERM>");
 492    }
 493   
 494  22 public void visitEnter(final VariableList variableList) {
 495  22 printer.levelPrintln("<VARLIST>");
 496  22 printer.pushLevel();
 497    }
 498   
 499  22 public void visitLeave(final VariableList variableList) {
 500  22 printer.popLevel();
 501  22 printer.levelPrintln("</VARLIST>");
 502    }
 503   
 504    // TODO mime 20070217: what do we do if an atom is not first element of a list?
 505    // we wouldn't get it here!!! But can we think of an output syntax anyway????
 506  1485 public void visitEnter(final ElementList list) {
 507  1485 final String operator = list.getOperator();
 508  1485 printer.levelPrint("<" + operator);
 509  1485 final boolean firstIsAtom = list.size() > 0 && list.getElement(0).isAtom();
 510  1485 if (firstIsAtom) {
 511  1236 final String atom = list.getElement(0).getAtom().getString();
 512  1236 if (atom != null) {
 513  1236 if ("VAR".equals(operator) || "PREDVAR".equals(operator)
 514    || "FUNVAR".equals(operator)) {
 515  693 printer.print(" id=\"" + atom + "\"");
 516  543 } else if ("PREDCON".equals(operator) || "FUNCON".equals(operator)) {
 517  543 printer.print(" ref=\"" + atom + "\"");
 518    } else {
 519  0 printer.print(" unknown=\"" + atom + "\"");
 520    }
 521    }
 522    }
 523  1485 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
 524  724 printer.print("/");
 525    }
 526  1485 printer.println(">");
 527  1485 printer.pushLevel();
 528    }
 529   
 530  1485 public void visitLeave(final ElementList list) {
 531  1485 printer.popLevel();
 532  1485 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
 533  724 return;
 534    }
 535  761 printer.levelPrintln("</" + list.getOperator() + ">");
 536    }
 537   
 538  1 public void visitEnter(final LiteratureItemList list) {
 539  1 printer.levelPrintln("<BIBLIOGRAPHY>");
 540  1 printer.pushLevel();
 541    }
 542   
 543  1 public void visitLeave(final LiteratureItemList list) {
 544  1 printer.popLevel();
 545  1 printer.levelPrintln("</BIBLIOGRAPHY>");
 546    }
 547   
 548  3 public void visitEnter(final LiteratureItem item) {
 549  3 printer.levelPrint("<ITEM");
 550  3 if (item.getLabel() != null) {
 551  3 printer.print(" label=\"" + item.getLabel() + "\"");
 552    }
 553  3 printer.println(">");
 554  3 printer.pushLevel();
 555    }
 556   
 557  3 public void visitLeave(final LiteratureItem item) {
 558  3 printer.popLevel();
 559  3 printer.levelPrintln("</ITEM>");
 560    }
 561   
 562    }