Ejemplo n.º 1
0
DECLARE_EXPORT void SetupMatrix::beginElement(XMLInput& pIn, const Attribute& pAttr)
{
  if (pAttr.isA(Tags::tag_rule)
      && pIn.getParentElement().first.isA(Tags::tag_rules))
    // A new rule
    pIn.readto(createRule(pIn.getAttributes()));
}
Ejemplo n.º 2
0
BNFRule *EBNFParser::rule()
{
    //match name
    if(token.tokenType!=EBNFToken::ID){
        error("Rule must start with name");
        return 0;
    }

    BNFRule *r=createRule(token.lexeme);
    r->startAlternatives();

    match(EBNFToken::ID);

    if(token.tokenType==EBNFToken::OPTIONS_BLOCK){
        //set rule options
        r->readOptions(token.lexeme);

        //read next token
        token = scanner->getToken();
    }

    match(EBNFToken::COLON);

    exp(r);
    match(EBNFToken::SEMICOLON);

    if(r->alternatives.size()>0 && r->alternatives.at(r->alternatives.size()-1).isEmpty()){
        r->alternatives[r->alternatives.size()-1].append(createEpsilonItem());
    }

    return r;
}
void removeSignalWatch(
		Signals* signals,
		char* busname,
		char* objectpath,
		char* interface,
		char* signalname)
{
	DBusError dbusError;
	dbus_error_init(&dbusError);
	bstring rule = createRule(busname, objectpath, interface, signalname);

	char* cstr_rule = bstr2cstr(rule,'\0');
	printf("Rule         : %s\n",cstr_rule);

	pthread_mutex_lock(&signals->dbus_mutex);
	dbus_bus_remove_match(signals->con,cstr_rule,&dbusError);
	pthread_mutex_unlock(&signals->dbus_mutex);
	if (dbus_error_is_set(&dbusError)) {
		fprintf(stderr, "%s %d: Error occurred: %s\n",__FILE__,__LINE__, dbusError.message);
		dbus_error_free(&dbusError);
	}

	bcstrfree(cstr_rule);
	bdestroy(rule);
}
void OsmAnd::ObfMapSectionReader_P::readRules(
    const std::unique_ptr<ObfReader_P>& reader,
    const std::shared_ptr<ObfMapSectionInfo_P::Rules>& rules)
{
    auto cis = reader->_codedInputStream.get();

    uint32_t defaultId = 1;
    for(;;)
    {
        gpb::uint32 tag = cis->ReadTag();
        switch(gpb::internal::WireFormatLite::GetTagFieldNumber(tag))
        {
        case 0:
            {
                auto free = rules->_decodingRules.size() * 2 + 1;
                rules->_coastlineBrokenEncodingType = free++;
                createRule(rules, 0, rules->_coastlineBrokenEncodingType, QString::fromLatin1("natural"), QString::fromLatin1("coastline_broken"));
                if(rules->_landEncodingType == -1)
                {
                    rules->_landEncodingType = free++;
                    createRule(rules, 0, rules->_landEncodingType, QString::fromLatin1("natural"), QString::fromLatin1("land"));
                }
            }
            return;
        case OBF::OsmAndMapIndex::kRulesFieldNumber:
            {
                gpb::uint32 length;
                cis->ReadVarint32(&length);
                auto oldLimit = cis->PushLimit(length);
                readRule(reader, defaultId++, rules);
                cis->PopLimit(oldLimit);
            }
            break;
        default:
            ObfReaderUtilities::skipUnknownField(cis, tag);
            break;
        }
    }
}
Ejemplo n.º 5
0
RulesConfigWidget::RulesConfigWidget(QWidget* parent): QWidget(parent)
{
    layout = new QHBoxLayout(this);

    leftWidget = new QWidget(this);
    leftLayout = new QVBoxLayout(leftWidget);
    rulesList = new QListWidget(this);
    leftLayout->addWidget(rulesList);
    QPushButton* upButton = new QPushButton(i18n("Up"), leftWidget);
    leftLayout->addWidget(upButton);
    QPushButton* downButton = new QPushButton(i18n("Down"), leftWidget);
    leftLayout->addWidget(downButton);
    newRuleButton = new QPushButton(i18n("New"));
    leftLayout->addWidget(newRuleButton);
    deleteRuleButton = new QPushButton(i18n("Delete"));
    leftLayout->addWidget(deleteRuleButton);
    layout->addWidget(leftWidget);

    rightWidget = new QWidget(this);
    rightLayout = new QFormLayout(rightWidget);
    QLabel *groupLabel = new QLabel(i18n("Group"));
    groupSelect = new QComboBox(rightWidget);
    rightLayout->addRow(groupLabel, groupSelect);
    QLabel *keyLabel = new QLabel(i18n("Key"));
    keySelect = new QComboBox;
    rightLayout->addRow(keyLabel, keySelect);
    QLabel *valueLabel = new QLabel(i18n("Value"));
    valueInput = new QLineEdit;
    rightLayout->addRow(valueLabel, valueInput);
    layout->addWidget(rightWidget);

    QObject::connect(rulesList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
                     this, SLOT(currentItemChanged(QListWidgetItem*,QListWidgetItem*)));
    QObject::connect(newRuleButton, SIGNAL(clicked()), this, SLOT(createRule()));
    QObject::connect(deleteRuleButton, SIGNAL(clicked()), this, SLOT(deleteRule()));
    QObject::connect(upButton, SIGNAL(clicked()), this, SLOT(ruleUp()));
    QObject::connect(downButton, SIGNAL(clicked()), this, SLOT(ruleDown()));
    load();
    configureKeys();
}
Ejemplo n.º 6
0
BNFRuleItem *EBNFParser::convertToZeroOrOneItem(const QString &newRuleName, BNFRuleItem *item)
{
    //Convert every option E? to a fresh non-terminal X and add
    //X = epsilon | E.

    //create X
    BNFRule *r=createRule(newRuleName);

    r->startAlternatives();

    //add epsilon
    r->addRuleItem(createEpsilonItem());

    //start new alternatives section
    r->startAlternatives();

    //add pointer to E
    item->token.lexeme=item->pointsTo;
    r->addRuleItem(item);

    //return item to point to X
    return createRulePointerItem(r);
}
Ejemplo n.º 7
0
BNFRuleItem *EBNFParser::convertToOneOrMoreItem(const QString &newRuleName, BNFRuleItem *item)
{
    //BNF can express 1 or more repetitions by e.g.:
    //X = E | X E

    //create X
    BNFRule *r=createRule(newRuleName);
    r->startAlternatives();

    //add pointer to copy of E
    item->token.lexeme=item->pointsTo;
    r->addRuleItem(new BNFRuleItem(*item));

    //start new alternatives section
    r->startAlternatives();

    //add pointer to X
    r->addRuleItem(createRulePointerItem(r));
    //add pointer to E
    r->addRuleItem(item);

    //return item to point to X
    return createRulePointerItem(r);
}
void OsmAnd::ObfMapSectionReader_P::readRule(
    const std::unique_ptr<ObfReader_P>& reader,
    uint32_t defaultId, const std::shared_ptr<ObfMapSectionInfo_P::Rules>& rules)
{
    auto cis = reader->_codedInputStream.get();

    gpb::uint32 ruleId = defaultId;
    gpb::uint32 ruleType = 0;
    QString ruleTag;
    QString ruleVal;
    for(;;)
    {
        auto tag = cis->ReadTag();
        switch(gpb::internal::WireFormatLite::GetTagFieldNumber(tag))
        {
        case 0:
            createRule(rules, ruleType, ruleId, ruleTag, ruleVal);
            return;
        case OBF::OsmAndMapIndex_MapEncodingRule::kValueFieldNumber:
            ObfReaderUtilities::readQString(cis, ruleVal);
            break;
        case OBF::OsmAndMapIndex_MapEncodingRule::kTagFieldNumber:
            ObfReaderUtilities::readQString(cis, ruleTag);
            break;
        case OBF::OsmAndMapIndex_MapEncodingRule::kTypeFieldNumber:
            cis->ReadVarint32(&ruleType);
            break;
        case OBF::OsmAndMapIndex_MapEncodingRule::kIdFieldNumber:
            cis->ReadVarint32(&ruleId);
            break;
        default:
            ObfReaderUtilities::skipUnknownField(cis, tag);
            break;
        }
    }
}
Ejemplo n.º 9
0
bool EBNFParser::atom(BNFRule *rule)
{
    if(token.tokenType==EBNFToken::RPAREN ||
            token.tokenType==EBNFToken::SEMICOLON ||
            token.tokenType==EBNFToken::PIPE){
        return false;
    }

    BNFRuleItem *item=new BNFRuleItem();

    if(token.tokenType==EBNFToken::NEGATION){
        item->isNegated=true;
        match(EBNFToken::NEGATION);
    }

    if(token.tokenType==EBNFToken::LPAREN){
        //Convert every group ( E ) to a fresh non-terminal X and add
        //X = E
        match(EBNFToken::LPAREN);
        BNFRule *r=createRule(QString("%1_%2").arg(rule->ruleName).arg(++rule->subruleCount));
        r->startAlternatives();
        item->isTerminal=false;
        item->pointsTo=r->ruleName;
        item->token=token;
        exp(r);
        match(EBNFToken::RPAREN);
    }else if(token.tokenType==EBNFToken::ID){
        item->isTerminal=false;
        item->pointsTo=token.lexeme;
        item->token=token;
        match(EBNFToken::ID);
    }else if(token.tokenType==EBNFToken::TERMINAL){
        item->isTerminal=true;
        item->token=token;
        match(EBNFToken::TERMINAL);
    }else{
        error("Could not match atom");
    }

    if(token.tokenType==EBNFToken::RANGE){
        if(item->token.tokenType!=EBNFToken::TERMINAL){
            error("Range start must be a terminal");
        }
        match(EBNFToken::RANGE);
        if(token.tokenType!=EBNFToken::TERMINAL){
            error("Range end must be a terminal");
        }
        item->rangeEndToken=token;
        match(EBNFToken::TERMINAL);
    }else if(token.tokenType==EBNFToken::STAR){
        item=convertToKleeneItem(QString("%1_%2_kleene").arg(rule->ruleName).arg(++rule->subruleCount), item);
        match(EBNFToken::STAR);
    }else if(token.tokenType==EBNFToken::PLUS){
        item=convertToOneOrMoreItem(QString("%1_%2_plus").arg(rule->ruleName).arg(++rule->subruleCount), item);
        match(EBNFToken::PLUS);
    }else if(token.tokenType==EBNFToken::QUESTION){
        item=convertToZeroOrOneItem(QString("%1_%2_question").arg(rule->ruleName).arg(++rule->subruleCount), item);
        match(EBNFToken::QUESTION);
    }

    rule->addRuleItem(item);

    return true;
}
Ejemplo n.º 10
0
	void *NclPresentationControlParser::parseRule(
		    DOMElement *parentElement, void *objGrandParent) {

		wclog << "parseRule" << endl;
		return createRule(parentElement, objGrandParent);
	}