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