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