版博士V2.0程序
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

attribute-value.js 1.6 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. "use strict";
  2. var _require = require('../helpers'),
  3. isWhitespace = _require.isWhitespace;
  4. var _require2 = require('../constants/tokenizer-contexts'),
  5. ATTRIBUTE_VALUE_WRAPPED_CONTEXT = _require2.ATTRIBUTE_VALUE_WRAPPED_CONTEXT,
  6. ATTRIBUTES_CONTEXT = _require2.ATTRIBUTES_CONTEXT,
  7. ATTRIBUTE_VALUE_BARE_CONTEXT = _require2.ATTRIBUTE_VALUE_BARE_CONTEXT;
  8. var _require3 = require('../constants/token-types'),
  9. TOKEN_ATTRIBUTE_VALUE_WRAPPER_START = _require3.TOKEN_ATTRIBUTE_VALUE_WRAPPER_START;
  10. function wrapper(state, tokens) {
  11. var wrapper = state.decisionBuffer;
  12. tokens.push({
  13. type: TOKEN_ATTRIBUTE_VALUE_WRAPPER_START,
  14. content: wrapper,
  15. startPosition: state.caretPosition,
  16. endPosition: state.caretPosition
  17. });
  18. state.accumulatedContent = '';
  19. state.decisionBuffer = '';
  20. state.currentContext = ATTRIBUTE_VALUE_WRAPPED_CONTEXT;
  21. state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT] = {
  22. wrapper: wrapper
  23. };
  24. state.caretPosition++;
  25. }
  26. function bare(state) {
  27. state.accumulatedContent = state.decisionBuffer;
  28. state.decisionBuffer = '';
  29. state.currentContext = ATTRIBUTE_VALUE_BARE_CONTEXT;
  30. state.caretPosition++;
  31. }
  32. function tagEnd(state) {
  33. state.accumulatedContent = '';
  34. state.decisionBuffer = '';
  35. state.currentContext = ATTRIBUTES_CONTEXT;
  36. }
  37. function parseSyntax(chars, state, tokens) {
  38. if (chars === '"' || chars === '\'') {
  39. return wrapper(state, tokens);
  40. }
  41. if (chars === '>' || chars === '/') {
  42. return tagEnd(state, tokens);
  43. }
  44. if (!isWhitespace(chars)) {
  45. return bare(state, tokens);
  46. }
  47. state.decisionBuffer = '';
  48. state.caretPosition++;
  49. }
  50. module.exports = {
  51. parseSyntax: parseSyntax
  52. };