/ msSLDParseNamedLayer */ / Parse NamedLayer root. */ /
| 710 | /* Parse NamedLayer root. */ |
| 711 | /************************************************************************/ |
| 712 | int msSLDParseNamedLayer(CPLXMLNode *psRoot, layerObj *psLayer) |
| 713 | { |
| 714 | CPLXMLNode *psFeatureTypeStyle, *psRule, *psUserStyle; |
| 715 | CPLXMLNode *psSLDName = NULL, *psNamedStyle=NULL; |
| 716 | CPLXMLNode *psElseFilter = NULL, *psFilter=NULL; |
| 717 | CPLXMLNode *psTmpNode = NULL; |
| 718 | FilterEncodingNode *psNode = NULL; |
| 719 | char *szExpression = NULL; |
| 720 | int i=0, nNewClasses=0, nClassBeforeFilter=0, nClassAfterFilter=0; |
| 721 | int nClassAfterRule=0, nClassBeforeRule=0; |
| 722 | char *pszTmpFilter = NULL; |
| 723 | layerObj *psCurrentLayer = NULL; |
| 724 | const char *pszWmsName=NULL; |
| 725 | int j=0; |
| 726 | const char *key=NULL; |
| 727 | |
| 728 | if (!psRoot || !psLayer) |
| 729 | return MS_FAILURE; |
| 730 | |
| 731 | psUserStyle = CPLGetXMLNode(psRoot, "UserStyle"); |
| 732 | if (psUserStyle) |
| 733 | { |
| 734 | psFeatureTypeStyle = CPLGetXMLNode(psUserStyle, "FeatureTypeStyle"); |
| 735 | if (psFeatureTypeStyle) |
| 736 | { |
| 737 | while (psFeatureTypeStyle && psFeatureTypeStyle->pszValue && |
| 738 | strcasecmp(psFeatureTypeStyle->pszValue, |
| 739 | "FeatureTypeStyle") == 0) |
| 740 | { |
| 741 | if (!psFeatureTypeStyle->pszValue || |
| 742 | strcasecmp(psFeatureTypeStyle->pszValue, |
| 743 | "FeatureTypeStyle") != 0) |
| 744 | { |
| 745 | psFeatureTypeStyle = psFeatureTypeStyle->psNext; |
| 746 | continue; |
| 747 | } |
| 748 | |
| 749 | /* -------------------------------------------------------------------- */ |
| 750 | /* Parse rules with no Else filter. */ |
| 751 | /* -------------------------------------------------------------------- */ |
| 752 | psRule = CPLGetXMLNode(psFeatureTypeStyle, "Rule"); |
| 753 | while (psRule) |
| 754 | { |
| 755 | if (!psRule->pszValue || |
| 756 | strcasecmp(psRule->pszValue, "Rule") != 0) |
| 757 | { |
| 758 | psRule = psRule->psNext; |
| 759 | continue; |
| 760 | } |
| 761 | /* used for scale setting */ |
| 762 | nClassBeforeRule = psLayer->numclasses; |
| 763 | |
| 764 | psElseFilter = CPLGetXMLNode(psRule, "ElseFilter"); |
| 765 | nClassBeforeFilter = psLayer->numclasses; |
| 766 | if (psElseFilter == NULL) |
| 767 | msSLDParseRule(psRule, psLayer); |
| 768 | nClassAfterFilter = psLayer->numclasses; |
| 769 |
no test coverage detected