Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
namespace Aws\Api;
3
 
4
/**
5
 * Encapsulates the documentation strings for a given service-version and
6
 * provides methods for extracting the desired parts related to a service,
7
 * operation, error, or shape (i.e., parameter).
8
 */
9
class DocModel
10
{
11
    /** @var array */
12
    private $docs;
13
 
14
    /**
15
     * @param array $docs
16
     *
17
     * @throws \RuntimeException
18
     */
19
    public function __construct(array $docs)
20
    {
21
        if (!extension_loaded('tidy')) {
22
            throw new \RuntimeException('The "tidy" PHP extension is required.');
23
        }
24
 
25
        $this->docs = $docs;
26
    }
27
 
28
    /**
29
     * Convert the doc model to an array.
30
     *
31
     * @return array
32
     */
33
    public function toArray()
34
    {
35
        return $this->docs;
36
    }
37
 
38
    /**
39
     * Retrieves documentation about the service.
40
     *
41
     * @return null|string
42
     */
43
    public function getServiceDocs()
44
    {
45
        return isset($this->docs['service']) ? $this->docs['service'] : null;
46
    }
47
 
48
    /**
49
     * Retrieves documentation about an operation.
50
     *
51
     * @param string $operation Name of the operation
52
     *
53
     * @return null|string
54
     */
55
    public function getOperationDocs($operation)
56
    {
57
        return isset($this->docs['operations'][$operation])
58
            ? $this->docs['operations'][$operation]
59
            : null;
60
    }
61
 
62
    /**
63
     * Retrieves documentation about an error.
64
     *
65
     * @param string $error Name of the error
66
     *
67
     * @return null|string
68
     */
69
    public function getErrorDocs($error)
70
    {
71
        return isset($this->docs['shapes'][$error]['base'])
72
            ? $this->docs['shapes'][$error]['base']
73
            : null;
74
    }
75
 
76
    /**
77
     * Retrieves documentation about a shape, specific to the context.
78
     *
79
     * @param string $shapeName  Name of the shape.
80
     * @param string $parentName Name of the parent/context shape.
81
     * @param string $ref        Name used by the context to reference the shape.
82
     *
83
     * @return null|string
84
     */
85
    public function getShapeDocs($shapeName, $parentName, $ref)
86
    {
87
        if (!isset($this->docs['shapes'][$shapeName])) {
88
            return '';
89
        }
90
 
91
        $result = '';
92
        $d = $this->docs['shapes'][$shapeName];
93
        if (isset($d['refs']["{$parentName}\$${ref}"])) {
94
            $result = $d['refs']["{$parentName}\$${ref}"];
95
        } elseif (isset($d['base'])) {
96
            $result = $d['base'];
97
        }
98
 
99
        if (isset($d['append'])) {
100
            if (!isset($d['excludeAppend'])
101
                || !in_array($parentName, $d['excludeAppend'])
102
            ) {
103
                $result .= $d['append'];
104
            }
105
        }
106
 
107
        if (isset($d['appendOnly'])
108
           && in_array($parentName, $d['appendOnly']['shapes'])
109
        ) {
110
            $result .= $d['appendOnly']['message'];
111
        }
112
 
113
        return $this->clean($result);
114
    }
115
 
116
    private function clean($content)
117
    {
118
        if (!$content) {
119
            return '';
120
        }
121
 
122
        $tidy = new \tidy();
123
        $tidy->parseString($content, [
124
            'indent' => true,
125
            'doctype' => 'omit',
126
            'output-html' => true,
127
            'show-body-only' => true,
128
            'drop-empty-paras' => true,
129
            'drop-font-tags' => true,
130
            'drop-proprietary-attributes' => true,
131
            'hide-comments' => true,
132
            'logical-emphasis' => true
133
        ]);
134
        $tidy->cleanRepair();
135
 
136
        return (string) $content;
137
    }
138
}