版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

51 lines
1.5 KiB

  1. "use strict";
  2. var _require = require('../helpers'),
  3. calculateTokenCharactersRange = _require.calculateTokenCharactersRange;
  4. var _require2 = require('../constants/token-types'),
  5. TOKEN_ATTRIBUTE_VALUE = _require2.TOKEN_ATTRIBUTE_VALUE,
  6. TOKEN_ATTRIBUTE_VALUE_WRAPPER_END = _require2.TOKEN_ATTRIBUTE_VALUE_WRAPPER_END;
  7. var _require3 = require('../constants/tokenizer-contexts'),
  8. ATTRIBUTES_CONTEXT = _require3.ATTRIBUTES_CONTEXT,
  9. ATTRIBUTE_VALUE_WRAPPED_CONTEXT = _require3.ATTRIBUTE_VALUE_WRAPPED_CONTEXT;
  10. function wrapper(state, tokens) {
  11. var range = calculateTokenCharactersRange(state, {
  12. keepBuffer: false
  13. });
  14. var endWrapperPosition = range.endPosition + 1;
  15. tokens.push({
  16. type: TOKEN_ATTRIBUTE_VALUE,
  17. content: state.accumulatedContent,
  18. startPosition: range.startPosition,
  19. endPosition: range.endPosition
  20. }, {
  21. type: TOKEN_ATTRIBUTE_VALUE_WRAPPER_END,
  22. content: state.decisionBuffer,
  23. startPosition: endWrapperPosition,
  24. endPosition: endWrapperPosition
  25. });
  26. state.accumulatedContent = '';
  27. state.decisionBuffer = '';
  28. state.currentContext = ATTRIBUTES_CONTEXT;
  29. state.caretPosition++;
  30. state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT] = undefined;
  31. }
  32. function parseSyntax(chars, state, tokens) {
  33. var wrapperChar = state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT].wrapper;
  34. if (chars === wrapperChar) {
  35. return wrapper(state, tokens);
  36. }
  37. state.accumulatedContent += state.decisionBuffer;
  38. state.decisionBuffer = '';
  39. state.caretPosition++;
  40. }
  41. module.exports = {
  42. parseSyntax: parseSyntax
  43. };