001 package com.thaiopensource.relaxng.impl; 002 003 import com.thaiopensource.xml.util.Name; 004 005 class StartAttributeDerivFunction extends StartTagOpenDerivFunction { 006 StartAttributeDerivFunction(Name name, ValidatorPatternBuilder builder) { 007 super(name, builder); 008 } 009 010 public Object caseElement(ElementPattern p) { 011 return getPatternBuilder().makeNotAllowed(); 012 } 013 014 public Object caseGroup(GroupPattern p) { 015 final Pattern p1 = p.getOperand1(); 016 final Pattern p2 = p.getOperand2(); 017 return getPatternBuilder().makeChoice( 018 memoApply(p1).applyForPattern(new ApplyAfterFunction(getPatternBuilder()) { 019 Pattern apply(Pattern x) { 020 return getPatternBuilder().makeGroup(x, p2); 021 } 022 }), 023 memoApply(p2).applyForPattern(new ApplyAfterFunction(getPatternBuilder()) { 024 Pattern apply(Pattern x) { 025 return getPatternBuilder().makeGroup(p1, x); 026 } 027 })); 028 } 029 030 public Object caseAttribute(AttributePattern p) { 031 if (!p.getNameClass().contains(getName())) 032 return getPatternBuilder().makeNotAllowed(); 033 return getPatternBuilder().makeAfter(p.getContent(), 034 getPatternBuilder().makeEmpty()); 035 } 036 037 PatternMemo apply(PatternMemo memo) { 038 return memo.startAttributeDeriv(this); 039 } 040 }