Packages

p

org.lrng

binding

package binding

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. All

Type Members

  1. macro class nameBasedXml extends Annotation with StaticAnnotation

    This annotation enables name based XML literal.

    This annotation enables name based XML literal.

    All XML literals in methods that are annotated as nameBasedXml will be transformed to calls to functions in xml object.

    import scala.language.dynamics
    object xml {
      object texts extends Dynamic {
        def selectDynamic(value: String) = value
      }
      case class interpolation(expression: Any)
      object uris {
        object http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus1 {
          object elements {
            case class tagName2(attributesAndChildren: Any*)
          }
        }
        object http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus2 {
          object attributes {
            case class attribute3(attributeValue: Any)
          }
          case class interpolation(expression: Any)
        }
      }
      @inline def noPrefix[Uri](uri: Uri) = uri
      object prefixes extends Dynamic {
        @inline def applyDynamic[Uri](prefix: String)(uri: Uri) = uri
      }
      case class literal[A](a: A*)
      object elements {
        case class tagName1(attributesAndChildren: Any*)
      }
      object attributes {
        case class attribute1(attributeValue: Any)
        case class attribute2(attributeValue: Any)
      }
      object values extends Dynamic {
        def selectDynamic(value: String) = value
      }
    }
    Annotations
    @compileTimeOnly( ... )
    Examples:
    1. Self-closing tags without prefixes

      @nameBasedXml
      def myXml = <tagName1/>
      myXml should be(xml.literal(xml.elements.tagName1()))
    2. ,
    3. Self-closing tags with some prefixes

      @nameBasedXml
      def myXml = <prefix1:tagName2 xmlns:prefix1="http://example.com/my-namespace-1"/>
      myXml should be(xml.literal(xml.prefixes.prefix1(xml.uris.http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus1).elements.tagName2()))
    4. ,
    5. Node list

      @nameBasedXml
      def myXml = <tagName1/><prefix1:tagName2 xmlns:prefix1="http://example.com/my-namespace-1"/>
      myXml should be(xml.literal(xml.elements.tagName1(), xml.prefixes.prefix1(xml.uris.http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus1).elements.tagName2()))
    6. ,
    7. Attributes

      case class f()
      
      @nameBasedXml
      def myXml = <tagName1 xmlns:prefix2="http://example.com/my-namespace-2" attribute1="special character: `"
        attribute2={ f() }
        prefix2:attribute3={"value"}
      />
      myXml should be(xml.literal(
        xml.elements.tagName1(
          xml.attributes.attribute1("special character: `"),
          xml.attributes.attribute2(xml.interpolation(f())),
          xml.uris.http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus2.attributes.attribute3(xml.uris.http$colon$div$divexample$u002Ecom$divmy$minusnamespace$minus2.interpolation("value"))
        )
      ))
    See also

    Pre SIP: name based XML literals

Value Members

  1. object nameBasedXml

Ungrouped