Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / present / image.go
1 // Copyright 2012 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("image", parseImage)
14 }
15
16 type Image struct {
17         Cmd    string // original command from present source
18         URL    string
19         Width  int
20         Height int
21 }
22
23 func (i Image) PresentCmd() string   { return i.Cmd }
24 func (i Image) TemplateName() string { return "image" }
25
26 func parseImage(ctx *Context, fileName string, lineno int, text string) (Elem, error) {
27         args := strings.Fields(text)
28         if len(args) < 2 {
29                 return nil, fmt.Errorf("incorrect image invocation: %q", text)
30         }
31         img := Image{Cmd: text, URL: args[1]}
32         a, err := parseArgs(fileName, lineno, args[2:])
33         if err != nil {
34                 return nil, err
35         }
36         switch len(a) {
37         case 0:
38                 // no size parameters
39         case 2:
40                 // If a parameter is empty (underscore) or invalid
41                 // leave the field set to zero. The "image" action
42                 // template will then omit that img tag attribute and
43                 // the browser will calculate the value to preserve
44                 // the aspect ratio.
45                 if v, ok := a[0].(int); ok {
46                         img.Height = v
47                 }
48                 if v, ok := a[1].(int); ok {
49                         img.Width = v
50                 }
51         default:
52                 return nil, fmt.Errorf("incorrect image invocation: %q", text)
53         }
54         return img, nil
55 }