github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/present/video.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package present
     6  
     7  import (
     8  	"fmt"
     9  	"strings"
    10  )
    11  
    12  func init() {
    13  	Register("video", parseVideo)
    14  }
    15  
    16  type Video struct {
    17  	Cmd        string // original command from present source
    18  	URL        string
    19  	SourceType string
    20  	Width      int
    21  	Height     int
    22  }
    23  
    24  func (v Video) PresentCmd() string   { return v.Cmd }
    25  func (v Video) TemplateName() string { return "video" }
    26  
    27  func parseVideo(ctx *Context, fileName string, lineno int, text string) (Elem, error) {
    28  	args := strings.Fields(text)
    29  	if len(args) < 3 {
    30  		return nil, fmt.Errorf("incorrect video invocation: %q", text)
    31  	}
    32  	vid := Video{Cmd: text, URL: args[1], SourceType: args[2]}
    33  	a, err := parseArgs(fileName, lineno, args[3:])
    34  	if err != nil {
    35  		return nil, err
    36  	}
    37  	switch len(a) {
    38  	case 0:
    39  		// no size parameters
    40  	case 2:
    41  		// If a parameter is empty (underscore) or invalid
    42  		// leave the field set to zero. The "video" action
    43  		// template will then omit that vid tag attribute and
    44  		// the browser will calculate the value to preserve
    45  		// the aspect ratio.
    46  		if v, ok := a[0].(int); ok {
    47  			vid.Height = v
    48  		}
    49  		if v, ok := a[1].(int); ok {
    50  			vid.Width = v
    51  		}
    52  	default:
    53  		return nil, fmt.Errorf("incorrect video invocation: %q", text)
    54  	}
    55  	return vid, nil
    56  }