syntax = "proto3";
package qzone;

enum QSelectorType {
	TypeSelector = 0;
	IDSelector = 1;
	ClassSelector = 2;
	UniversalSelector = 3;
	AttributeSelector = 4;
	PseudoSelector = 5;
	SimpleSelectorSequence = 6;
	CombineSelector = 7;
	SelectorGroup = 8;
	SignSelector = 9;  // not use
};

enum QAttributeType {
    QPositionAttribute = 0;
    QDisplayAttribute = 1;
    QLeftAttribute = 2;
    QRightAttribute = 3;
    QTopAttribute = 4;
    QBottomAttribute = 5;
    QWidthAttribute = 6;
    QHeightAttribute = 7;
    QMinWidthAttribute = 8;
    QMinHeightAttribute = 9;
    QMaxWidthAttribute = 10;
    QMaxHeightAttribute = 11;
    QLineHeightAttribute = 12;
    QMarginTopAttribute = 13;
    QMarginRightAttribute = 14;
    QMarginBottomAttribute = 15;
    QMarginLeftAttribute = 16;
    QPaddingTopAttribute = 17;
    QPaddingRightAttribute = 18;
    QPaddingBottomAttribute = 19;
    QPaddingLeftAttribute = 20;
    QTextAlignAttribute = 21;
    QOverflowXAttribute = 22;
    QOverflowYAttribute = 23;
    QAlignItemsAttribute = 24;
    QBorderLeftWidthAttribute = 25;
    QBorderRightWidthAttribute = 26;
    QBorderTopWidthAttribute = 27;
    QBorderBottomWidthAttribute = 28;
    QBorderLeftStyleAttribute = 29;
    QBorderRightStyleAttribute = 30;
    QBorderTopStyleAttribute = 31;
    QBorderBottomStyleAttribute = 32;
    QBorderLeftColorAttribute = 33;
    QBorderRightColorAttribute = 34;
    QBorderTopColorAttribute = 35;
    QBorderBottomColorAttribute = 36;
    QFloatAttribute = 37;
    QBackgroundColorAttribute = 38;
    QColorAttribute = 39;
    QFontSizeAttribute = 40;
    QFontWeightAttribute = 41;
    QVerticalAlignAttribute = 42;
    QBoxSizingAttribute = 43;
    QOpacityAttribute = 44;    //属性值为浮点数，乘以100转为整形
    QZIndexAttribute = 45;
    QWhiteSpaceAttribute = 46;
}

enum QPositionValueType {
    QPositionStaticValue = 0;
    QPositionAbsoluteValue = 1;
    QPositionFixedValue = 2;
    QPositionRelativeValue = 3;
    QPositionStickyValue = 4;
}

enum QDisplayValueType {
    QDisplayInlineValue = 0;
    QDisplayBlockValue = 1;
    QDisplayInlineBlockValue = 2;
    QDisplayFlexValue = 3;
    QDisplayNoneValue = 4;
}

enum QTextAlignValueType {
    QTextAlignLeftValue = 0;
    QTextAlignRightValue = 1;
    QTextAlignCenterValue = 2;
    QTextAlignJustifyValue = 3;
}

enum QOverflowValueType {
    QOverflowVisibleValue = 0;
    QOverflowHiddenValue = 1;
    QOverflowScrollValue = 2;
}

enum QAlignItemsValueType {
    QAlignItemsStretchValue = 0;
    QAlignItemsCenterValue = 1;
    QAlignItemsFlexStartValue = 2;
    QAlignItemsFlexEndValue = 3;
    QAlignItemsBaselineValue = 4;
}

enum QBorderWidthValueType {
    QBorderWidthMediumValue = 0;
    QBorderWidthThinValue = 1;
    QBorderWidthThickValue = 2;
}

enum QBorderStyleValueType {
    QBorderStyleNoneValue = 0;
    QBorderStyleHiddenValue = 1;
    QBorderStyleDottedValue = 2;
    QBorderStyleDashedValue = 3;
    QBorderStyleSolidValue = 4;
    QBorderStyleDoubleValue = 5;
    QBorderStyleGrooveValue = 6;
    QBorderStyleRidgeValue = 7;
    QBorderStyleInsetValue = 8;
    QBorderStyleOutsetValue = 9;
}

enum QFloatValueType {
    QFloatNoneValue = 0;
    QFloatLeftValue = 1;
    QFloatRightValue = 2;
}

enum QFontSizeValueType {
    QFontSizeMediumValue = 0;
    QFontSizeXXSmallValue = 1;
    QFontSizeXSmallValue = 2;
    QFontSizeSmallValue = 3;
    QFontSizeLargeValue = 4;
    QFontSizeXLargeValue = 5;
    QFontSizeXXLargeValue = 6;
    QFontSizeSmallerValue = 7;
    QFontSizeLargerValue = 8;
}

enum QFontWeightValueType {
    QFontWeightNormalValue = 0;
    QFontWeightBoldValue = 1;
    QFontWeightBolderValue = 2;
    QFontWeightLighterValue = 3;
}

enum QVerticalAlignValueType {
    QVerticalAlignBaselineValue = 0;
    QVerticalAlignSubValue = 1;
    QVerticalAlignSuperValue = 2;
    QVerticalAlignTopValue = 3;
    QVerticalAlignTextTopValue = 4;
    QVerticalAlignMiddleValue = 5;
    QVerticalAlignBottomValue = 6;
    QVerticalAlignTextBottomValue = 7;
}

enum QBoxSizingValueType {
    QBoxSizingContentBoxValue = 0;
    QBoxSizingBorderBoxValue = 1;
}

enum QWhiteSpaceValueType {
    QWhiteSpaceNoWrapValue = 0;
    QWhiteSpacePreValue = 1;
    QWhiteSpacePreLineValue = 2;
    QWhiteSpacePreWrapValue = 3;
}

enum QAttributeValueType {
    QAttribAutoValue = 0;             //属性值是auto
    QAttribInitialValue = 1;          //属性值是initial
    QAttribInheritValue = 2;          //属性值是inherit
    QAttribNormalValue = 3;           //属性值是normal
    QAttribTransparentValue = 4;      //属性值是transparent
    QAttribNumberValue = 5;           //属性值是数值，不带单位，数值在attribIntValue
    QAttribEnumValue = 6;             //属性值是枚举，数值在attribIntValue
    QAttribStringValue = 7;           //属性值是字符串，值在attribStringValue
    QLengthPXValue = 8;               //value中存的是px长度属性值，数值在attribIntValue
    QLengthRPXValue = 9;              //value中存的是rpx长度属性值，数值在attribIntValue
    QLengthPTValue = 10;              //value中存的是pt长度属性值，数值在attribIntValue
    QLengthPencentValue = 11;         //value中存的是%长度属性值，数值在attribIntValue
}

message QAttributePair {
    QAttributeType type = 1;
    QAttributeValueType valueType = 2;
    uint32 attribIntValue = 3;
    string attribStringValue = 4;
}

message QRulesModel {
    repeated QAttributePair attributes = 1;
}

message QTypeSelectorModel {
    string typeName = 1;
}

message QIdSelectorModel {
	string idName = 1;
}

message QClassSelectorModel {
    string className = 1;
}

message QGroupSelectorModel {
    repeated bytes selectorList = 1;
}

message QUniversalSelectorModel {
}

message QSequenceSelectorModel {
    repeated bytes selectorList = 1;
}

enum QAttributeFilterRule {
    Prefix = 0;                  //[attribute^=value]
    Suffix = 1;                  //[attribute$=value]
    Include = 2;                 //[attribute~=value]
    Equal = 3;                   //[attribute=value]
    Substring = 4;               //[attribute*=value]
    DashMatch = 5;               //[attribute|=value]
    NoRule = 6;
};

message QAttributeSelectorModel {
    string attributeKey = 1;
    string attributeValue = 2;
    QAttributeFilterRule filterRule = 3;
}

enum CombineType {
    InstanceSibling = 0;      // '+'
    NormalSibling = 1;        // '~'
    InstanceInherical = 2;    // '>'
    NormalInherical = 3;      // ' '
    NoCombine = 4;
};

message QInstanceSiblingList {
	repeated bytes instanceSibling = 1;
}

message QNormalSiblingList {
	repeated bytes normalSibling = 1;
}

message QInstanceInhericalList {
	repeated bytes instanceInherical = 1;
}

message QNormalInhericalList {
	repeated bytes normalInherical = 1;
}

message QCombineSelectorModel {
    QInstanceSiblingList  instanceSiblingList = 1;
    QNormalSiblingList  normalSiblingList = 2;
    QInstanceInhericalList  instanceInhericalList = 3;
    QNormalInhericalList  normalInhericalList = 4;
    CombineType combineType = 5;
}

enum QPseudoParameterType {
	STRING = 0;
    NUMBER = 1;
    POLYNOMIAL = 2;
    IDENT = 3;
    NONE = 4;
}

message QPseudoPolynomial {
	sint32 coefficient = 1;
	sint32 constant = 2;
	sint32 sign = 3;
}

message QPseudoParameter {
	QPseudoPolynomial polynomial = 1;
	string pString = 2;
	sint32 pNumber = 3;
	QPseudoParameterType type = 4;
}

message QPseudoSelectorModel {
    string pseudoData = 1;
    QPseudoParameter parameter = 2;
}

message QSelectorModel {
    QRulesModel ruleData = 1;     //后面改成QRulesModel形式
    QSelectorType selectorType = 2;
    QIdSelectorModel  idSelector = 3;
    QClassSelectorModel clsSelector = 4;
    QTypeSelectorModel typeSelector = 5;
    QUniversalSelectorModel universalSelector = 6;
    QGroupSelectorModel groupSelector = 7;
    QSequenceSelectorModel sequenceSelector = 8;
    QAttributeSelectorModel attributeSelector = 9;
    QCombineSelectorModel combineSelector = 10;
    QPseudoSelectorModel pseudoSelector = 11;
}

message QStyleSheetModel {
    string hostCSSFilePath = 1;
    repeated QSelectorModel selectors = 2;
}
