NodePtr parseFactor() { NodePtr ret = parsePrimitive(); auto p = reader.peek(); while (p == '?' || p == '*' || p == '+' || p == '{') { int minRepetition; int maxRepetition; switch (p) { case '?': ret = std::make_shared<OptionalNode>(ret); reader.next(); break; case '*': ret = std::make_shared<KleenNode>(ret); reader.next(); break; case '+': ret = std::make_shared<OneOrMoreNode>(ret); reader.next(); break; case '{': // !NOTE : max must greater than zero, min must less or equal to max parseRepetition(minRepetition, maxRepetition); ret = std::make_shared<RepetitionNode>(ret, minRepetition, maxRepetition); break; } p = reader.peek(); } return ret; }
TestPlugin::TestPlugin(WebFrame* frame, const WebPluginParams& params, WebTestDelegate* delegate) : m_frame(frame) , m_delegate(delegate) , m_container(0) , m_context(0) , m_colorTexture(0) , m_mailboxChanged(false) , m_framebuffer(0) , m_touchEventRequest(WebPluginContainer::TouchEventRequestTypeNone) , m_reRequestTouchEvents(false) , m_printEventDetails(false) , m_printUserGestureStatus(false) , m_canProcessDrag(false) , m_isPersistent(params.mimeType == pluginPersistsMimeType()) , m_canCreateWithoutRenderer(params.mimeType == canCreateWithoutRendererMimeType()) { const CR_DEFINE_STATIC_LOCAL(WebString, kAttributePrimitive, ("primitive")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributeBackgroundColor, ("background-color")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributePrimitiveColor, ("primitive-color")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributeOpacity, ("opacity")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributeAcceptsTouch, ("accepts-touch")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributeReRequestTouchEvents, ("re-request-touch")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributePrintEventDetails, ("print-event-details")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributeCanProcessDrag, ("can-process-drag")); const CR_DEFINE_STATIC_LOCAL(WebString, kAttributePrintUserGestureStatus, ("print-user-gesture-status")); DCHECK_EQ(params.attributeNames.size(), params.attributeValues.size()); size_t size = params.attributeNames.size(); for (size_t i = 0; i < size; ++i) { const WebString& attributeName = params.attributeNames[i]; const WebString& attributeValue = params.attributeValues[i]; if (attributeName == kAttributePrimitive) m_scene.primitive = parsePrimitive(attributeValue); else if (attributeName == kAttributeBackgroundColor) parseColor(attributeValue, m_scene.backgroundColor); else if (attributeName == kAttributePrimitiveColor) parseColor(attributeValue, m_scene.primitiveColor); else if (attributeName == kAttributeOpacity) m_scene.opacity = parseOpacity(attributeValue); else if (attributeName == kAttributeAcceptsTouch) m_touchEventRequest = parseTouchEventRequestType(attributeValue); else if (attributeName == kAttributeReRequestTouchEvents) m_reRequestTouchEvents = parseBoolean(attributeValue); else if (attributeName == kAttributePrintEventDetails) m_printEventDetails = parseBoolean(attributeValue); else if (attributeName == kAttributeCanProcessDrag) m_canProcessDrag = parseBoolean(attributeValue); else if (attributeName == kAttributePrintUserGestureStatus) m_printUserGestureStatus = parseBoolean(attributeValue); } if (m_canCreateWithoutRenderer) m_delegate->printMessage(std::string("TestPlugin: canCreateWithoutRenderer\n")); }
//////////////////////////////////////////////////////////////////////////////// // Exponent --> Primitive ["^" Primitive] bool Eval::parseExponent ( std::vector <std::pair <std::string, Lexer::Type> >& infix, int &i) const { if (i < infix.size () && parsePrimitive (infix, i)) { while (i < infix.size () && infix[i].first == "^" && infix[i].second == Lexer::typeOperator) { ++i; if (! parsePrimitive (infix, i)) return false; } return true; } return false; }
TestPlugin::TestPlugin(WebFrame* frame, const WebPluginParams& params, WebTestDelegate* delegate) : m_frame(frame) , m_delegate(delegate) , m_container(0) , m_context(0) , m_colorTexture(0) , m_mailboxChanged(false) , m_framebuffer(0) , m_touchEventRequest(WebPluginContainer::TouchEventRequestTypeNone) , m_reRequestTouchEvents(false) , m_printEventDetails(false) , m_printUserGestureStatus(false) , m_canProcessDrag(false) { static const WebString kAttributePrimitive = WebString::fromUTF8("primitive"); static const WebString kAttributeBackgroundColor = WebString::fromUTF8("background-color"); static const WebString kAttributePrimitiveColor = WebString::fromUTF8("primitive-color"); static const WebString kAttributeOpacity = WebString::fromUTF8("opacity"); static const WebString kAttributeAcceptsTouch = WebString::fromUTF8("accepts-touch"); static const WebString kAttributeReRequestTouchEvents = WebString::fromUTF8("re-request-touch"); static const WebString kAttributePrintEventDetails = WebString::fromUTF8("print-event-details"); static const WebString kAttributeCanProcessDrag = WebString::fromUTF8("can-process-drag"); static const WebString kAttributePrintUserGestureStatus = WebString::fromUTF8("print-user-gesture-status"); BLINK_ASSERT(params.attributeNames.size() == params.attributeValues.size()); size_t size = params.attributeNames.size(); for (size_t i = 0; i < size; ++i) { const WebString& attributeName = params.attributeNames[i]; const WebString& attributeValue = params.attributeValues[i]; if (attributeName == kAttributePrimitive) m_scene.primitive = parsePrimitive(attributeValue); else if (attributeName == kAttributeBackgroundColor) parseColor(attributeValue, m_scene.backgroundColor); else if (attributeName == kAttributePrimitiveColor) parseColor(attributeValue, m_scene.primitiveColor); else if (attributeName == kAttributeOpacity) m_scene.opacity = parseOpacity(attributeValue); else if (attributeName == kAttributeAcceptsTouch) m_touchEventRequest = parseTouchEventRequestType(attributeValue); else if (attributeName == kAttributeReRequestTouchEvents) m_reRequestTouchEvents = parseBoolean(attributeValue); else if (attributeName == kAttributePrintEventDetails) m_printEventDetails = parseBoolean(attributeValue); else if (attributeName == kAttributeCanProcessDrag) m_canProcessDrag = parseBoolean(attributeValue); else if (attributeName == kAttributePrintUserGestureStatus) m_printUserGestureStatus = parseBoolean(attributeValue); } }
void Quake3MapReader::parseEntity(parser::DefTokeniser& tok) { // Map of keyvalues for this entity EntityKeyValues keyValues; // The actual entity. This is initially null, and will be created when // primitives start or the end of the entity is reached scene::INodePtr entity; // Start parsing, first token must be an open brace tok.assertNextToken("{"); std::string token = tok.nextToken(); // Reset the primitive counter, we're starting a new entity _primitiveCount = 0; while (true) { // Token must be either a key, a "{" to indicate the start of a // primitive, or a "}" to indicate the end of the entity if (token == "{") // PRIMITIVE { // Create the entity right now, if not yet done if (entity == NULL) { entity = createEntity(keyValues); } // Parse the primitive block, and pass the parent entity parsePrimitive(tok, entity); } else if (token == "}") // END OF ENTITY { // Create the entity if necessary and return it if (entity == NULL) { entity = createEntity(keyValues); } break; } else // KEY { std::string value = tok.nextToken(); // Sanity check (invalid number of tokens will get us out of sync) if (value == "{" || value == "}") { std::string text = (boost::format(_("Parsed invalid value '%s' for key '%s'")) % value % token).str(); throw FailureException(text); } // Otherwise add the keyvalue pair to our map keyValues.insert(EntityKeyValues::value_type(token, value)); } // Get the next token token = tok.nextToken(); } // Insert the entity _importFilter.addEntity(entity); }