semantic_annotations.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.visitors = exports.annotators = void 0;
  4. exports.register = register;
  5. exports.activate = activate;
  6. exports.deactivate = deactivate;
  7. exports.annotate = annotate;
  8. const semantic_annotator_js_1 = require("./semantic_annotator.js");
  9. exports.annotators = new Map();
  10. exports.visitors = new Map();
  11. function register(annotator) {
  12. const name = annotator.domain + ':' + annotator.name;
  13. annotator instanceof semantic_annotator_js_1.SemanticAnnotator
  14. ? exports.annotators.set(name, annotator)
  15. : exports.visitors.set(name, annotator);
  16. }
  17. function activate(domain, name) {
  18. const key = domain + ':' + name;
  19. const annotator = exports.annotators.get(key) || exports.visitors.get(key);
  20. if (annotator) {
  21. annotator.active = true;
  22. }
  23. }
  24. function deactivate(domain, name) {
  25. const key = domain + ':' + name;
  26. const annotator = exports.annotators.get(key) || exports.visitors.get(key);
  27. if (annotator) {
  28. annotator.active = false;
  29. }
  30. }
  31. function annotate(node) {
  32. for (const annotator of exports.annotators.values()) {
  33. if (annotator.active) {
  34. annotator.annotate(node);
  35. }
  36. }
  37. for (const visitor of exports.visitors.values()) {
  38. if (visitor.active) {
  39. visitor.visit(node, Object.assign({}, visitor.def));
  40. }
  41. }
  42. }