001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002 *
003 * Copyright 2000-2011, Michael Meyling <mime@qedeq.org>.
004 *
005 * "Hilbert II" is free software; you can redistribute
006 * it and/or modify it under the terms of the GNU General Public
007 * License as published by the Free Software Foundation; either
008 * version 2 of the License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU General Public License for more details.
014 */
015
016 package org.qedeq.kernel.xml.dao;
017
018 import java.io.IOException;
019
020 import org.qedeq.base.io.TextOutput;
021 import org.qedeq.base.utility.StringUtility;
022 import org.qedeq.kernel.bo.KernelContext;
023 import org.qedeq.kernel.bo.module.ControlVisitor;
024 import org.qedeq.kernel.bo.module.KernelQedeqBo;
025 import org.qedeq.kernel.se.base.list.ElementList;
026 import org.qedeq.kernel.se.base.module.Add;
027 import org.qedeq.kernel.se.base.module.Author;
028 import org.qedeq.kernel.se.base.module.AuthorList;
029 import org.qedeq.kernel.se.base.module.Axiom;
030 import org.qedeq.kernel.se.base.module.Chapter;
031 import org.qedeq.kernel.se.base.module.Existential;
032 import org.qedeq.kernel.se.base.module.FormalProof;
033 import org.qedeq.kernel.se.base.module.FormalProofLine;
034 import org.qedeq.kernel.se.base.module.FormalProofLineList;
035 import org.qedeq.kernel.se.base.module.Formula;
036 import org.qedeq.kernel.se.base.module.FunctionDefinition;
037 import org.qedeq.kernel.se.base.module.Header;
038 import org.qedeq.kernel.se.base.module.Import;
039 import org.qedeq.kernel.se.base.module.ImportList;
040 import org.qedeq.kernel.se.base.module.InitialFunctionDefinition;
041 import org.qedeq.kernel.se.base.module.InitialPredicateDefinition;
042 import org.qedeq.kernel.se.base.module.Latex;
043 import org.qedeq.kernel.se.base.module.LatexList;
044 import org.qedeq.kernel.se.base.module.LinkList;
045 import org.qedeq.kernel.se.base.module.LiteratureItem;
046 import org.qedeq.kernel.se.base.module.LiteratureItemList;
047 import org.qedeq.kernel.se.base.module.Location;
048 import org.qedeq.kernel.se.base.module.LocationList;
049 import org.qedeq.kernel.se.base.module.ModusPonens;
050 import org.qedeq.kernel.se.base.module.Node;
051 import org.qedeq.kernel.se.base.module.PredicateDefinition;
052 import org.qedeq.kernel.se.base.module.Proof;
053 import org.qedeq.kernel.se.base.module.Proposition;
054 import org.qedeq.kernel.se.base.module.Qedeq;
055 import org.qedeq.kernel.se.base.module.Rename;
056 import org.qedeq.kernel.se.base.module.Rule;
057 import org.qedeq.kernel.se.base.module.Section;
058 import org.qedeq.kernel.se.base.module.Specification;
059 import org.qedeq.kernel.se.base.module.Subsection;
060 import org.qedeq.kernel.se.base.module.SubsectionList;
061 import org.qedeq.kernel.se.base.module.SubstFree;
062 import org.qedeq.kernel.se.base.module.SubstFunc;
063 import org.qedeq.kernel.se.base.module.SubstPred;
064 import org.qedeq.kernel.se.base.module.Term;
065 import org.qedeq.kernel.se.base.module.Universal;
066 import org.qedeq.kernel.se.base.module.UsedByList;
067 import org.qedeq.kernel.se.base.module.VariableList;
068 import org.qedeq.kernel.se.common.Plugin;
069 import org.qedeq.kernel.se.common.SourceFileExceptionList;
070
071
072 /**
073 * This class prints a QEDEQ module in XML format in an output stream.
074 *
075 * @author Michael Meyling
076 */
077 public final class Qedeq2Xml extends ControlVisitor implements Plugin {
078
079 /** Output goes here. */
080 private TextOutput printer;
081
082 /**
083 * Constructor.
084 *
085 * @param plugin This plugin we work for.
086 * @param bo QEDEQ BO.
087 * @param printer Print herein.
088 */
089 private Qedeq2Xml(final Plugin plugin, final KernelQedeqBo bo, final TextOutput printer) {
090 super(plugin, bo);
091 this.printer = printer;
092 }
093
094 /**
095 * Prints a XML representation of given QEDEQ module into a given output stream.
096 *
097 * @param plugin Plugin we work for.
098 * @param bo BO QEDEQ module object.
099 * @param printer Print herein.
100 * @throws SourceFileExceptionList Major problem occurred.
101 * @throws IOException Writing failed.
102 */
103 public static void print(final Plugin plugin, final KernelQedeqBo bo, final TextOutput printer) throws
104 SourceFileExceptionList, IOException {
105 final Qedeq2Xml converter = new Qedeq2Xml(plugin, bo, printer);
106 try {
107 converter.traverse();
108 } finally {
109 printer.flush();
110 }
111 if (printer.checkError()) {
112 throw printer.getError();
113 }
114 }
115
116 public final void visitEnter(final Qedeq qedeq) {
117 printer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
118 printer.println("<QEDEQ");
119 printer.println(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
120 printer.println(" xsi:noNamespaceSchemaLocation=\"http://www.qedeq.org/"
121 + KernelContext.getInstance().getKernelVersionDirectory() + "/xml/qedeq.xsd\">");
122 printer.pushLevel();
123 }
124
125 public final void visitLeave(final Qedeq qedeq) {
126 printer.popLevel();
127 printer.println("</QEDEQ>");
128 }
129
130 public void visitEnter(final Header header) {
131 printer.print("<HEADER");
132 if (header.getEmail() != null) {
133 printer.print(" email=\"" + StringUtility.escapeXml(header.getEmail()) + "\"");
134 }
135 printer.println(">");
136 printer.pushLevel();
137 }
138
139 public void visitLeave(final Header header) {
140 printer.popLevel();
141 printer.println("</HEADER>");
142 }
143
144 public void visitEnter(final Specification specification) {
145 printer.print("<SPECIFICATION");
146 if (specification.getName() != null) {
147 printer.print(" name=\"" + StringUtility.escapeXml(specification.getName()) + "\"");
148 }
149 if (specification.getName() != null) {
150 printer.print(" ruleVersion=\"" + StringUtility.escapeXml(specification.getRuleVersion()) + "\"");
151 }
152 printer.println(">");
153 printer.pushLevel();
154 }
155
156 public void visitLeave(final Specification specification) {
157 printer.popLevel();
158 printer.println("</SPECIFICATION>");
159 }
160
161 public void visitEnter(final LatexList latexList) {
162 final String last = getCurrentContext().getLocationWithinModule();
163 if (last.endsWith(".getTitle()")) {
164 printer.println("<TITLE>");
165 } else if (last.endsWith(".getSummary()")) {
166 printer.println("<ABSTRACT>");
167 } else if (last.endsWith(".getIntroduction()")) {
168 printer.println("<INTRODUCTION>");
169 } else if (last.endsWith(".getName()")) {
170 printer.println("<NAME>");
171 } else if (last.endsWith(".getPrecedingText()")) {
172 printer.println("<PRECEDING>");
173 } else if (last.endsWith(".getSucceedingText()")) {
174 printer.println("<SUCCEEDING>");
175 } else if (last.endsWith(".getLatex()")) {
176 printer.println("<TEXT>");
177 } else if (last.endsWith(".getDescription()")) {
178 printer.println("<DESCRIPTION>");
179 }
180 printer.pushLevel();
181 }
182
183 public void visitLeave(final LatexList latexList) {
184 printer.popLevel();
185 final String last = getCurrentContext().getLocationWithinModule();
186 if (last.endsWith(".getTitle()")) {
187 printer.println("</TITLE>");
188 } else if (last.endsWith(".getSummary()")) {
189 printer.println("</ABSTRACT>");
190 } else if (last.endsWith(".getIntroduction()")) {
191 printer.println("</INTRODUCTION>");
192 } else if (last.endsWith(".getName()")) {
193 printer.println("</NAME>");
194 } else if (last.endsWith(".getPrecedingText()")) {
195 printer.println("</PRECEDING>");
196 } else if (last.endsWith(".getSucceedingText()")) {
197 printer.println("</SUCCEEDING>");
198 } else if (last.endsWith(".getLatex()")) {
199 printer.println("</TEXT>");
200 } else if (last.endsWith(".getDescription()")) {
201 printer.println("</DESCRIPTION>");
202 }
203 }
204
205 public void visitEnter(final Latex latex) {
206 printer.print("<LATEX");
207 if (latex.getLanguage() != null) {
208 printer.print(" language=\"" + latex.getLanguage() + "\"");
209 }
210 printer.println(">");
211 if (latex.getLatex() != null) {
212 printer.pushLevel();
213 printer.println("<![CDATA[");
214 printer.print(" ");
215 final String tabs = printer.getLevel();
216 printer.clearLevel();
217 // escape ]]>
218 final String data = StringUtility.replace(latex.getLatex(),
219 "]]>", "]]]]><![CDATA[>");
220 printer.println(StringUtility.useSystemLineSeparator(data).trim());
221 printer.pushLevel(tabs);
222 }
223 }
224
225 public void visitLeave(final Latex latex) {
226 if (latex.getLatex() != null) {
227 printer.println("]]>");
228 printer.popLevel();
229 }
230 printer.println("</LATEX>");
231 }
232
233 public void visitEnter(final LocationList locationList) {
234 printer.println("<LOCATIONS>");
235 printer.pushLevel();
236 }
237
238 public void visitLeave(final LocationList locationList) {
239 printer.popLevel();
240 printer.println("</LOCATIONS>");
241 }
242
243 public void visitEnter(final Location location) {
244 printer.print("<LOCATION");
245 if (location.getLocation() != null) {
246 printer.print(" value=\"" + location.getLocation() + "\"");
247 }
248 printer.println(" />");
249 }
250
251 public void visitEnter(final AuthorList authorList) {
252 printer.println("<AUTHORS>");
253 printer.pushLevel();
254 }
255
256 public void visitLeave(final AuthorList authorList) {
257 printer.popLevel();
258 printer.println("</AUTHORS>");
259 }
260
261 public void visitEnter(final Author author) {
262 printer.print("<AUTHOR");
263 if (author.getEmail() != null) {
264 printer.print(" email=\"" + StringUtility.escapeXml(author.getEmail()) + "\"");
265 }
266 printer.println(">");
267 printer.pushLevel();
268 if (author.getName() != null) {
269 printer.println("<NAME>");
270 }
271 printer.pushLevel();
272 }
273
274 public void visitLeave(final Author author) {
275 printer.popLevel();
276 if (author.getName() != null) {
277 printer.println("</NAME>");
278 }
279 printer.popLevel();
280 printer.println("</AUTHOR>");
281 }
282
283 public void visitEnter(final ImportList importList) {
284 printer.println("<IMPORTS>");
285 printer.pushLevel();
286 }
287
288 public void visitLeave(final ImportList importList) {
289 printer.popLevel();
290 printer.println("</IMPORTS>");
291 }
292
293 public void visitEnter(final Import imp) {
294 printer.print("<IMPORT");
295 if (imp.getLabel() != null) {
296 printer.print(" label=\"" + StringUtility.escapeXml(imp.getLabel()) + "\"");
297 }
298 printer.println(">");
299 printer.pushLevel();
300 }
301
302 public void visitLeave(final Import imp) {
303 printer.popLevel();
304 printer.println("</IMPORT>");
305 }
306
307 public void visitEnter(final UsedByList usedByList) {
308 printer.println("<USEDBY>");
309 printer.pushLevel();
310 }
311
312 public void visitLeave(final UsedByList usedByList) {
313 printer.popLevel();
314 printer.println("</USEDBY>");
315 }
316
317 public void visitEnter(final Chapter chapter) {
318 printer.print("<CHAPTER");
319 if (chapter.getNoNumber() != null) {
320 printer.print(" noNumber=\"" + chapter.getNoNumber().booleanValue() + "\"");
321 }
322 printer.println(">");
323 printer.pushLevel();
324 }
325
326 public void visitLeave(final Chapter chapter) {
327 printer.popLevel();
328 printer.println("</CHAPTER>");
329 }
330
331 public void visitEnter(final Section section) {
332 printer.print("<SECTION");
333 if (section.getNoNumber() != null) {
334 printer.print(" noNumber=\"" + section.getNoNumber().booleanValue() + "\"");
335 }
336 printer.println(">");
337 printer.pushLevel();
338 }
339
340 public void visitLeave(final Section section) {
341 printer.popLevel();
342 printer.println("</SECTION>");
343 }
344
345 public void visitEnter(final SubsectionList subsectionList) {
346 printer.println("<SUBSECTIONS>");
347 printer.pushLevel();
348 }
349
350 public void visitLeave(final SubsectionList subsectionList) {
351 printer.popLevel();
352 printer.println("</SUBSECTIONS>");
353 }
354
355 public void visitEnter(final Subsection subsection) {
356 printer.print("<SUBSECTION");
357 if (subsection.getId() != null) {
358 printer.print(" id=\"" + StringUtility.escapeXml(subsection.getId()) + "\"");
359 }
360 if (subsection.getLevel() != null) {
361 printer.print(" level=\"" + StringUtility.escapeXml(subsection.getLevel()) + "\"");
362 }
363 printer.println(">");
364 printer.pushLevel();
365 }
366
367 public void visitLeave(final Subsection subsection) {
368 printer.popLevel();
369 printer.println("</SUBSECTION>");
370 }
371
372 public void visitEnter(final Node node) {
373 printer.print("<NODE");
374 if (node.getId() != null) {
375 printer.print(" id=\"" + StringUtility.escapeXml(node.getId()) + "\"");
376 }
377 if (node.getLevel() != null) {
378 printer.print(" level=\"" + StringUtility.escapeXml(node.getLevel()) + "\"");
379 }
380 printer.println(">");
381 printer.pushLevel();
382 }
383
384 public void visitLeave(final Node node) {
385 printer.popLevel();
386 printer.println("</NODE>");
387 }
388
389 public void visitEnter(final Axiom axiom) {
390 printer.print("<AXIOM");
391 if (axiom.getDefinedOperator() != null) {
392 printer.print(" definedOperator=\"" + StringUtility.escapeXml(axiom.getDefinedOperator()) + "\"");
393 }
394 printer.println(">");
395 printer.pushLevel();
396 }
397
398 public void visitLeave(final Axiom axiom) {
399 printer.popLevel();
400 printer.println("</AXIOM>");
401 }
402
403 public void visitEnter(final Proposition proposition) {
404 printer.println("<THEOREM>");
405 printer.pushLevel();
406 }
407
408 public void visitLeave(final Proposition proposition) {
409 printer.popLevel();
410 printer.println("</THEOREM>");
411 }
412
413 public void visitEnter(final Proof proof) {
414 printer.print("<PROOF");
415 if (proof.getKind() != null) {
416 printer.print(" kind=\"" + StringUtility.escapeXml(proof.getKind()) + "\"");
417 }
418 if (proof.getLevel() != null) {
419 printer.print(" level=\"" + StringUtility.escapeXml(proof.getLevel()) + "\"");
420 }
421 printer.println(">");
422 }
423
424 public void visitLeave(final Proof proof) {
425 printer.println("</PROOF>");
426 }
427
428 public void visitEnter(final FormalProof proof) {
429 printer.println("<FORMAL_PROOF>");
430 printer.pushLevel();
431 }
432
433 public void visitLeave(final FormalProof proof) {
434 printer.popLevel();
435 printer.println("</FORMAL_PROOF>");
436 }
437
438 public void visitEnter(final FormalProofLineList proof) {
439 printer.println("<LINES>");
440 printer.pushLevel();
441 }
442
443 public void visitLeave(final FormalProofLineList proof) {
444 printer.popLevel();
445 printer.println("</LINES>");
446 }
447
448 public void visitEnter(final FormalProofLine line) {
449 printer.print("<L");
450 if (line.getLabel() != null) {
451 printer.print(" label=\"" + StringUtility.escapeXml(line.getLabel()) + "\"");
452 }
453 printer.println(">");
454 printer.pushLevel();
455 }
456
457 public void visitLeave(final FormalProofLine line) {
458 printer.popLevel();
459 printer.println("</L>");
460 }
461
462 public void visitEnter(final ModusPonens reason) {
463 printer.print("<MP");
464 if (reason.getReference1() != null) {
465 printer.print(" ref1=\"" + StringUtility.escapeXml(reason.getReference1()) + "\"");
466 }
467 if (reason.getReference2() != null) {
468 printer.print(" ref2=\"" + StringUtility.escapeXml(reason.getReference2()) + "\"");
469 }
470 }
471
472 public void visitLeave(final ModusPonens reason) {
473 printer.println("/>");
474 }
475
476 public void visitEnter(final Add reason) {
477 printer.print("<ADD");
478 if (reason.getReference() != null) {
479 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
480 }
481 }
482
483 public void visitLeave(final Add reason) {
484 printer.println("/>");
485 }
486
487 public void visitEnter(final Rename reason) {
488 printer.print("<RENAME");
489 if (reason.getReference() != null) {
490 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
491 }
492 if (reason.getOccurrence() != 0) {
493 printer.print(" occurrence=\"" + StringUtility.escapeXml("" + reason.getOccurrence()) + "\"");
494 }
495 printer.println(">");
496 printer.pushLevel();
497 }
498
499 public void visitLeave(final Rename reason) {
500 printer.popLevel();
501 printer.println("</RENAME>");
502 }
503
504 public void visitEnter(final SubstFree reason) {
505 printer.print("<SUBST_FREE");
506 if (reason.getReference() != null) {
507 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
508 }
509 printer.println(">");
510 printer.pushLevel();
511 }
512
513 public void visitLeave(final SubstFree reason) {
514 printer.popLevel();
515 printer.println("</SUBST_FREE>");
516 }
517
518 public void visitEnter(final SubstFunc reason) {
519 printer.print("<SUBST_FUNVAR");
520 if (reason.getReference() != null) {
521 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
522 }
523 printer.println(">");
524 printer.pushLevel();
525 }
526
527 public void visitLeave(final SubstFunc reason) {
528 printer.popLevel();
529 printer.println("</SUBST_FUNVAR>");
530 }
531
532 public void visitEnter(final SubstPred reason) {
533 printer.print("<SUBST_PREDVAR");
534 if (reason.getReference() != null) {
535 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
536 }
537 printer.println(">");
538 printer.pushLevel();
539 }
540
541 public void visitLeave(final SubstPred reason) {
542 printer.popLevel();
543 printer.println("</SUBST_PREDVAR>");
544 }
545
546 public void visitEnter(final Existential reason) {
547 printer.print("<EXISTENTIAL");
548 if (reason.getReference() != null) {
549 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
550 }
551 printer.println(">");
552 printer.pushLevel();
553 }
554
555 public void visitLeave(final Existential reason) {
556 printer.popLevel();
557 printer.println("</EXISTENTIAL>");
558 }
559
560 public void visitEnter(final Universal reason) {
561 printer.print("<UNIVERSAL");
562 if (reason.getReference() != null) {
563 printer.print(" ref=\"" + StringUtility.escapeXml(reason.getReference()) + "\"");
564 }
565 printer.println(">");
566 printer.pushLevel();
567 }
568
569 public void visitLeave(final Universal reason) {
570 printer.popLevel();
571 printer.println("</UNIVERSAL>");
572 }
573
574 public void visitEnter(final InitialPredicateDefinition definition) {
575 printer.print("<DEFINITION_PREDICATE_INITIAL");
576 if (definition.getArgumentNumber() != null) {
577 printer.print(" arguments=\"" + StringUtility.escapeXml(definition.getArgumentNumber()) + "\"");
578 }
579 if (definition.getName() != null) {
580 printer.print(" name=\"" + StringUtility.escapeXml(definition.getName()) + "\"");
581 }
582 printer.println(">");
583 printer.pushLevel();
584 if (definition.getLatexPattern() != null) {
585 printer.println("<LATEXPATTERN>" + StringUtility.escapeXml(definition.getLatexPattern())
586 + "</LATEXPATTERN>");
587 }
588 }
589
590 public void visitLeave(final InitialPredicateDefinition definition) {
591 printer.popLevel();
592 printer.println("</DEFINITION_PREDICATE_INITIAL>");
593 }
594
595 public void visitEnter(final PredicateDefinition definition) {
596 printer.print("<DEFINITION_PREDICATE");
597 if (definition.getArgumentNumber() != null) {
598 printer.print(" arguments=\"" + StringUtility.escapeXml(definition.getArgumentNumber()) + "\"");
599 }
600 if (definition.getName() != null) {
601 printer.print(" name=\"" + StringUtility.escapeXml(definition.getName()) + "\"");
602 }
603 printer.println(">");
604 printer.pushLevel();
605 if (definition.getLatexPattern() != null) {
606 printer.println("<LATEXPATTERN>" + StringUtility.escapeXml(definition.getLatexPattern())
607 + "</LATEXPATTERN>");
608 }
609 }
610
611 public void visitLeave(final PredicateDefinition definition) {
612 printer.popLevel();
613 printer.println("</DEFINITION_PREDICATE>");
614 }
615
616 public void visitEnter(final InitialFunctionDefinition definition) {
617 printer.print("<DEFINITION_FUNCTION_INITIAL");
618 if (definition.getArgumentNumber() != null) {
619 printer.print(" arguments=\"" + StringUtility.escapeXml(definition.getArgumentNumber()) + "\"");
620 }
621 if (definition.getName() != null) {
622 printer.print(" name=\"" + StringUtility.escapeXml(definition.getName()) + "\"");
623 }
624 printer.println(">");
625 printer.pushLevel();
626 if (definition.getLatexPattern() != null) {
627 printer.println("<LATEXPATTERN>" + definition.getLatexPattern()
628 + "</LATEXPATTERN>");
629 }
630 }
631
632 public void visitLeave(final InitialFunctionDefinition definition) {
633 printer.popLevel();
634 printer.println("</DEFINITION_FUNCTION_INITIAL>");
635 }
636
637 public void visitEnter(final FunctionDefinition definition) {
638 printer.print("<DEFINITION_FUNCTION");
639 if (definition.getArgumentNumber() != null) {
640 printer.print(" arguments=\"" + StringUtility.escapeXml(definition.getArgumentNumber()) + "\"");
641 }
642 if (definition.getName() != null) {
643 printer.print(" name=\"" + StringUtility.escapeXml(definition.getName()) + "\"");
644 }
645 printer.println(">");
646 printer.pushLevel();
647 if (definition.getLatexPattern() != null) {
648 printer.println("<LATEXPATTERN>" + definition.getLatexPattern()
649 + "</LATEXPATTERN>");
650 }
651 }
652
653 public void visitLeave(final FunctionDefinition definition) {
654 printer.popLevel();
655 printer.println("</DEFINITION_FUNCTION>");
656 }
657
658 public void visitEnter(final Rule rule) {
659 printer.print("<RULE");
660 if (rule.getName() != null) {
661 printer.print(" name=\"" + StringUtility.escapeXml(rule.getName()) + "\"");
662 }
663 printer.println(">");
664 printer.pushLevel();
665 }
666
667 public void visitLeave(final Rule rule) {
668 printer.popLevel();
669 printer.println("</RULE>");
670 }
671
672 public void visitEnter(final LinkList linkList) {
673 for (int i = 0; i < linkList.size(); i++) {
674 printer.print("<LINK");
675 if (linkList.get(i) != null) {
676 printer.print(" id=\"" + StringUtility.escapeXml(linkList.get(i)) + "\"");
677 }
678 printer.println("/>");
679 };
680 }
681
682 public void visitEnter(final Formula formula) {
683 printer.println("<FORMULA>");
684 printer.pushLevel();
685 }
686
687 public void visitLeave(final Formula formula) {
688 printer.popLevel();
689 printer.println("</FORMULA>");
690 }
691
692 public void visitEnter(final Term term) {
693 printer.println("<TERM>");
694 printer.pushLevel();
695 }
696
697 public void visitLeave(final Term term) {
698 printer.popLevel();
699 printer.println("</TERM>");
700 }
701
702 public void visitEnter(final VariableList variableList) {
703 printer.println("<VARLIST>");
704 printer.pushLevel();
705 }
706
707 public void visitLeave(final VariableList variableList) {
708 printer.popLevel();
709 printer.println("</VARLIST>");
710 }
711
712 // TODO mime 20070217: what do we do if an atom is not first element of a list?
713 // we wouldn't get it here!!! But can we think of an output syntax anyway????
714 public void visitEnter(final ElementList list) {
715 final String operator = list.getOperator();
716 printer.print("<" + operator);
717 final boolean firstIsAtom = list.size() > 0 && list.getElement(0).isAtom();
718 if (firstIsAtom) {
719 final String atom = list.getElement(0).getAtom().getString();
720 if (atom != null) {
721 if ("VAR".equals(operator) || "PREDVAR".equals(operator)
722 || "FUNVAR".equals(operator)) {
723 printer.print(" id=\"" + StringUtility.escapeXml(atom) + "\"");
724 } else if ("PREDCON".equals(operator) || "FUNCON".equals(operator)) {
725 printer.print(" ref=\"" + StringUtility.escapeXml(atom) + "\"");
726 } else {
727 printer.print(" unknown=\"" + StringUtility.escapeXml(atom) + "\"");
728 }
729 }
730 }
731 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
732 printer.print("/");
733 }
734 printer.println(">");
735 printer.pushLevel();
736 }
737
738 public void visitLeave(final ElementList list) {
739 printer.popLevel();
740 if (list.size() == 0 || list.size() == 1 && list.getElement(0).isAtom()) {
741 return;
742 }
743 printer.println("</" + list.getOperator() + ">");
744 }
745
746 public void visitEnter(final LiteratureItemList list) {
747 printer.println("<BIBLIOGRAPHY>");
748 printer.pushLevel();
749 }
750
751 public void visitLeave(final LiteratureItemList list) {
752 printer.popLevel();
753 printer.println("</BIBLIOGRAPHY>");
754 }
755
756 public void visitEnter(final LiteratureItem item) {
757 printer.print("<ITEM");
758 if (item.getLabel() != null) {
759 printer.print(" label=\"" + StringUtility.escapeXml(item.getLabel()) + "\"");
760 }
761 printer.println(">");
762 printer.pushLevel();
763 }
764
765 public void visitLeave(final LiteratureItem item) {
766 printer.popLevel();
767 printer.println("</ITEM>");
768 }
769
770 public String getPluginId() {
771 return this.getClass().getName();
772 }
773
774 public String getPluginActionName() {
775 return "generate XML";
776 }
777
778 public String getPluginDescription() {
779 return "Transformes QEDEQ module into XML data";
780 }
781
782 }
|