OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [exp/] [html/] [render.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2011 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 html
6
 
7
import (
8
        "bufio"
9
        "errors"
10
        "fmt"
11
        "io"
12
        "strings"
13
)
14
 
15
type writer interface {
16
        io.Writer
17
        WriteByte(byte) error
18
        WriteString(string) (int, error)
19
}
20
 
21
// Render renders the parse tree n to the given writer.
22
//
23
// Rendering is done on a 'best effort' basis: calling Parse on the output of
24
// Render will always result in something similar to the original tree, but it
25
// is not necessarily an exact clone unless the original tree was 'well-formed'.
26
// 'Well-formed' is not easily specified; the HTML5 specification is
27
// complicated.
28
//
29
// Calling Parse on arbitrary input typically results in a 'well-formed' parse
30
// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.
31
// For example, in a 'well-formed' parse tree, no  element is a child of
32
// another  element: parsing "" results in two sibling elements.
33
// Similarly, in a 'well-formed' parse tree, no  element is a child of a
34
//  element: parsing "

" results in a

with two sibling

35
// children; the  is reparented to the 's parent. However, calling
36
// Parse on "" does not return an error, but the result has an 
      
      
37
// element with an  child, and is therefore not 'well-formed'.
38
//
39
// Programmatically constructed trees are typically also 'well-formed', but it
40
// is possible to construct a tree that looks innocuous but, when rendered and
41
// re-parsed, results in a different tree. A simple example is that a solitary
42
// text node would become a tree containing ,  and  elements.
43
// Another example is that the programmatic equivalent of "abc"
44
// becomes "abc".
45
func Render(w io.Writer, n *Node) error {
46
        if x, ok := w.(writer); ok {
47
                return render(x, n)
48
        }
49
        buf := bufio.NewWriter(w)
50
        if err := render(buf, n); err != nil {
51
                return err
52
        }
53
        return buf.Flush()
54
}
55
 
56
// plaintextAbort is returned from render1 when a  element</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>57</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// has been rendered. No more end tags should be rendered after that.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>58</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>var plaintextAbort = errors.New("html: internal error (plaintext abort)")</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>59</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>60</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>func render(w writer, n *Node) error {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>61</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        err := render1(w, n)</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>62</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if err == plaintextAbort {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>63</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                err = nil</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>64</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>65</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>66</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>}</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>67</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>68</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>func render1(w writer, n *Node) error {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>69</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        // Render non-element nodes; these are the easy cases.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>70</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        switch n.Type {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>71</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case ErrorNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>72</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return errors.New("html: cannot render an ErrorNode node")</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>73</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case TextNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>74</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return escape(w, n.Data)</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>75</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case DocumentNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>76</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                for _, c := range n.Child {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>77</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if err := render1(w, c); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>78</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>79</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>80</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>81</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return nil</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>82</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case ElementNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>83</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                // No-op.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>84</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case CommentNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>85</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString("<!--"); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>86</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>87</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>88</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString(n.Data); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>89</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>90</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>91</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString("-->"); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>92</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>93</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>94</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return nil</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>95</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case DoctypeNode:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>96</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString("<!DOCTYPE "); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>97</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>98</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>99</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString(n.Data); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>100</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>101</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>102</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if n.Attr != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>103</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        var p, s string</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>104</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        for _, a := range n.Attr {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>105</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                switch a.Key {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>106</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                case "public":</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>107</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        p = a.Val</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>108</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                case "system":</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>109</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        s = a.Val</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>110</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>111</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>112</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if p != "" {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>113</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                if _, err := w.WriteString(" PUBLIC "); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>114</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>115</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>116</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                if err := writeQuoted(w, p); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>117</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>118</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>119</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                if s != "" {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>120</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        if err := w.WriteByte(' '); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>121</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>122</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>123</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        if err := writeQuoted(w, s); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>124</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>125</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>126</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>127</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        } else if s != "" {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>128</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                if _, err := w.WriteString(" SYSTEM "); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>129</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>130</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>131</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                if err := writeQuoted(w, s); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>132</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>133</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>134</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>135</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>136</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return w.WriteByte('>')</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>137</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        default:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>138</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return errors.New("html: unknown node type")</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>139</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>140</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>141</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        // Render the <xxx> opening tag.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>142</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if err := w.WriteByte('<'); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>143</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>144</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>145</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if _, err := w.WriteString(n.Data); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>146</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>147</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>148</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        for _, a := range n.Attr {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>149</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if err := w.WriteByte(' '); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>150</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>151</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>152</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if a.Namespace != "" {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>153</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if _, err := w.WriteString(a.Namespace); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>154</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>155</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>156</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if err := w.WriteByte(':'); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>157</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>158</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>159</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>160</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString(a.Key); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>161</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>162</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>163</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if _, err := w.WriteString(`="`); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>164</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>165</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>166</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if err := escape(w, a.Val); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>167</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>168</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>169</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if err := w.WriteByte('"'); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>170</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>171</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>172</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>173</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if voidElements[n.Data] {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>174</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if len(n.Child) != 0 {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>175</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return fmt.Errorf("html: void element <%s> has child nodes", n.Data)</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>176</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>177</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                _, err := w.WriteString("/>")</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>178</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>179</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>180</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if err := w.WriteByte('>'); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>181</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>182</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>183</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>184</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        // Add initial newline where there is danger of a newline beging ignored.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>185</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if len(n.Child) > 0 && n.Child[0].Type == TextNode && strings.HasPrefix(n.Child[0].Data, "\n") {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>186</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                switch n.Data {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>187</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                case "pre", "listing", "textarea":</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>188</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if err := w.WriteByte('\n'); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>189</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>190</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>191</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>192</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>193</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>194</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        // Render any child nodes.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>195</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        switch n.Data {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>196</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>197</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                for _, c := range n.Child {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>198</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if c.Type != TextNode {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>199</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return fmt.Errorf("html: raw text element <%s> has non-text child node", n.Data)</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>200</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>201</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if _, err := w.WriteString(c.Data); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>202</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>203</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>204</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>205</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                if n.Data == "plaintext" {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>206</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        // Don't render anything else. <plaintext> must be the</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>207</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        // last element in the file, with no closing tag.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>208</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        return plaintextAbort</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>209</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>210</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        case "textarea", "title":</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>211</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                for _, c := range n.Child {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>212</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if c.Type != TextNode {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>213</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return fmt.Errorf("html: RCDATA element <%s> has non-text child node", n.Data)</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>214</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>215</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if err := render1(w, c); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>216</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>217</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>218</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>219</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        default:</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>220</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                for _, c := range n.Child {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>221</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        if err := render1(w, c); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>222</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>223</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>224</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>225</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>226</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>227</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        // Render the </xxx> closing tag.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>228</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if _, err := w.WriteString("</"); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>229</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>230</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>231</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if _, err := w.WriteString(n.Data); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>232</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>233</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>234</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        return w.WriteByte('>')</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>235</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>}</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>236</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>237</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// writeQuoted writes s to w surrounded by quotes. Normally it will use double</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>238</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// quotes, but if s contains a double quote, it will use single quotes.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>239</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// It is used for writing the identifiers in a doctype declaration.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>240</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// In valid HTML, they can't contain both types of quotes.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>241</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>func writeQuoted(w writer, s string) error {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>242</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        var q byte = '"'</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>243</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if strings.Contains(s, `"`) {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>244</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                q = '\''</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>245</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>246</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if err := w.WriteByte(q); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>247</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>248</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>249</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if _, err := w.WriteString(s); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>250</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>251</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>252</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        if err := w.WriteByte(q); err != nil {</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>253</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>                return err</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>254</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        }</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>255</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        return nil</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>256</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>}</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>257</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>&nbsp;</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>258</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// Section 12.1.2, "Elements", gives this list of void elements. Void elements</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>259</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>// are those that can't have any contents.</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>260</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>var voidElements = map[string]bool{</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>261</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "area":    true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>262</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "base":    true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>263</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "br":      true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>264</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "col":     true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>265</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "command": true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>266</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "embed":   true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>267</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "hr":      true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>268</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "img":     true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>269</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "input":   true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>270</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "keygen":  true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>271</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "link":    true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>272</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "meta":    true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>273</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "param":   true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>274</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "source":  true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>275</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "track":   true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>276</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>        "wbr":     true,</code></pre></td>
      </tr>
      <tr valign="middle">
         <td>277</td>
         <td></td>
         <td></td>
         <td class="code"><pre><code>}</code></pre></td>
      </tr>
   </tbody>
</table>


<script type='text/javascript'>
/* <![CDATA[ */
var rev = new Array();
var a = document.getElementsByTagName('a');
for (var i = 0; i < a.length; i++) {
  if (a[i].className == 'blame-revision') {
    var id = a[i].id;
    addEvent(a[i], 'mouseover', function() { mouseover(this) } );
    addEvent(a[i], 'mouseout', function() { mouseout(this) } );
  }
}

function mouseover(a) {
  // Find the revision by using the link
  var m = /rev=(\d+)/.exec(a.href);
  var r = m[1];

  div = document.createElement('div');
  div.className = 'blame-popup';
  div.innerHTML = rev[r];
  a.parentNode.appendChild(div);
}

function mouseout(a) {
  var div = a.parentNode.parentNode.getElementsByTagName('div');
  for (var i = 0; i < div.length; i++) {
    if (div[i].className = 'blame-popup') {
      div[i].parentNode.removeChild(div[i]);
    }
  }
}

function addEvent(obj, type, func) {
  if (obj.addEventListener) {
    obj.addEventListener(type, func, false);
    return true;
  } else if (obj.attachEvent) {
    return obj.attachEvent('on' + type, func);
  } else {
    return false;
  }
}
rev[747] = '<div class="info"><span class="date">2012-03-02 13:20:09 GMT<\/span><\/div><div class="msg">Initial check-in of GCC, with properties matching the upstream.<\/div>';
/* ]]> */
</script>

</div>
</div>
<div id="websvnfooter">
    <p style="padding:0; margin:0"><small>powered by: <a href="http://www.websvn.info">WebSVN 2.1.0</a></small></p>
</div>
        </div>

                
        <div style="clear: both; margin-left: 200px;">
            <ins
                class="adsbygoogle"
                style="display:inline-block;width:728px;height:90px"
                data-ad-client="ca-pub-8561717607970465"
                data-ad-slot="4128044249"></ins>
            <script type="text/javascript">(adsbygoogle = window.adsbygoogle || []).push({});</script>
        </div>
        
            </div>
    <div class="bot">
        &copy; copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores&reg;, registered trademark.
    </div>
</div>

<!-- Old browser warning -->
<script type="text/javascript">
  if (!('borderImage' in document.createElement('div').style)) {
    var div = document.getElementById('old-browser-warning')
    div.innerHTML = '<b>Your browser is out-of-date!</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Update your browser to view this website correctly.'
    div.setAttribute('style', 'background-color: red; border-bottom: 2px solid black; margin: 0 -12px 12px -12px; padding: 12px; text-align: center;')
  }
</script>
<!-- /Old browser warning -->
<!-- Google search -->
<script type="text/javascript" src="//www.google.com/jsapi"></script>
<script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
<script type="text/javascript" src="//www.google.com/coop/cse/t13n?form=cse-search-box&amp;t13n_langs=en"></script>
<script type="text/javascript" src="//www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en"></script>
<!-- /Google search -->

</body>
</html>