Showing preview only (1,222K chars total). Download the full file or copy to clipboard to get everything.
Repository: saintfish/chardet
Branch: master
Commit: 5e3ef4b5456d
Files: 26
Total size: 1.2 MB
Directory structure:
gitextract_f_ghewj2/
├── 2022.go
├── AUTHORS
├── LICENSE
├── README.md
├── detector.go
├── detector_test.go
├── example_test.go
├── icu-license.html
├── multi_byte.go
├── recognizer.go
├── single_byte.go
├── testdata/
│ ├── 8859_1_da.html
│ ├── 8859_1_de.html
│ ├── 8859_1_en.html
│ ├── 8859_1_es.html
│ ├── 8859_1_fr.html
│ ├── 8859_1_pt.html
│ ├── big5.html
│ ├── euc_jp.html
│ ├── euc_kr.html
│ ├── gb18030.html
│ ├── shift_jis.html
│ ├── utf8.html
│ └── utf8_bom.html
├── unicode.go
└── utf8.go
================================================
FILE CONTENTS
================================================
================================================
FILE: 2022.go
================================================
package chardet
import (
"bytes"
)
type recognizer2022 struct {
charset string
escapes [][]byte
}
func (r *recognizer2022) Match(input *recognizerInput) (output recognizerOutput) {
return recognizerOutput{
Charset: r.charset,
Confidence: r.matchConfidence(input.input),
}
}
func (r *recognizer2022) matchConfidence(input []byte) int {
var hits, misses, shifts int
input:
for i := 0; i < len(input); i++ {
c := input[i]
if c == 0x1B {
for _, esc := range r.escapes {
if bytes.HasPrefix(input[i+1:], esc) {
hits++
i += len(esc)
continue input
}
}
misses++
} else if c == 0x0E || c == 0x0F {
shifts++
}
}
if hits == 0 {
return 0
}
quality := (100*hits - 100*misses) / (hits + misses)
if hits+shifts < 5 {
quality -= (5 - (hits + shifts)) * 10
}
if quality < 0 {
quality = 0
}
return quality
}
var escapeSequences_2022JP = [][]byte{
{0x24, 0x28, 0x43}, // KS X 1001:1992
{0x24, 0x28, 0x44}, // JIS X 212-1990
{0x24, 0x40}, // JIS C 6226-1978
{0x24, 0x41}, // GB 2312-80
{0x24, 0x42}, // JIS X 208-1983
{0x26, 0x40}, // JIS X 208 1990, 1997
{0x28, 0x42}, // ASCII
{0x28, 0x48}, // JIS-Roman
{0x28, 0x49}, // Half-width katakana
{0x28, 0x4a}, // JIS-Roman
{0x2e, 0x41}, // ISO 8859-1
{0x2e, 0x46}, // ISO 8859-7
}
var escapeSequences_2022KR = [][]byte{
{0x24, 0x29, 0x43},
}
var escapeSequences_2022CN = [][]byte{
{0x24, 0x29, 0x41}, // GB 2312-80
{0x24, 0x29, 0x47}, // CNS 11643-1992 Plane 1
{0x24, 0x2A, 0x48}, // CNS 11643-1992 Plane 2
{0x24, 0x29, 0x45}, // ISO-IR-165
{0x24, 0x2B, 0x49}, // CNS 11643-1992 Plane 3
{0x24, 0x2B, 0x4A}, // CNS 11643-1992 Plane 4
{0x24, 0x2B, 0x4B}, // CNS 11643-1992 Plane 5
{0x24, 0x2B, 0x4C}, // CNS 11643-1992 Plane 6
{0x24, 0x2B, 0x4D}, // CNS 11643-1992 Plane 7
{0x4e}, // SS2
{0x4f}, // SS3
}
func newRecognizer_2022JP() *recognizer2022 {
return &recognizer2022{
"ISO-2022-JP",
escapeSequences_2022JP,
}
}
func newRecognizer_2022KR() *recognizer2022 {
return &recognizer2022{
"ISO-2022-KR",
escapeSequences_2022KR,
}
}
func newRecognizer_2022CN() *recognizer2022 {
return &recognizer2022{
"ISO-2022-CN",
escapeSequences_2022CN,
}
}
================================================
FILE: AUTHORS
================================================
Sheng Yu (yusheng dot sjtu at gmail dot com)
================================================
FILE: LICENSE
================================================
Copyright (c) 2012 chardet Authors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Partial of the Software is derived from ICU project. See icu-license.html for
license of the derivative portions.
================================================
FILE: README.md
================================================
# chardet
chardet is library to automatically detect
[charset](http://en.wikipedia.org/wiki/Character_encoding) of texts for [Go
programming language](http://golang.org/). It's based on the algorithm and data
in [ICU](http://icu-project.org/)'s implementation.
## Documentation and Usage
See [pkgdoc](https://pkg.go.dev/github.com/saintfish/chardet)
================================================
FILE: detector.go
================================================
// Package chardet ports character set detection from ICU.
package chardet
import (
"errors"
"sort"
)
// Result contains all the information that charset detector gives.
type Result struct {
// IANA name of the detected charset.
Charset string
// IANA name of the detected language. It may be empty for some charsets.
Language string
// Confidence of the Result. Scale from 1 to 100. The bigger, the more confident.
Confidence int
}
// Detector implements charset detection.
type Detector struct {
recognizers []recognizer
stripTag bool
}
// List of charset recognizers
var recognizers = []recognizer{
newRecognizer_utf8(),
newRecognizer_utf16be(),
newRecognizer_utf16le(),
newRecognizer_utf32be(),
newRecognizer_utf32le(),
newRecognizer_8859_1_en(),
newRecognizer_8859_1_da(),
newRecognizer_8859_1_de(),
newRecognizer_8859_1_es(),
newRecognizer_8859_1_fr(),
newRecognizer_8859_1_it(),
newRecognizer_8859_1_nl(),
newRecognizer_8859_1_no(),
newRecognizer_8859_1_pt(),
newRecognizer_8859_1_sv(),
newRecognizer_8859_2_cs(),
newRecognizer_8859_2_hu(),
newRecognizer_8859_2_pl(),
newRecognizer_8859_2_ro(),
newRecognizer_8859_5_ru(),
newRecognizer_8859_6_ar(),
newRecognizer_8859_7_el(),
newRecognizer_8859_8_I_he(),
newRecognizer_8859_8_he(),
newRecognizer_windows_1251(),
newRecognizer_windows_1256(),
newRecognizer_KOI8_R(),
newRecognizer_8859_9_tr(),
newRecognizer_sjis(),
newRecognizer_gb_18030(),
newRecognizer_euc_jp(),
newRecognizer_euc_kr(),
newRecognizer_big5(),
newRecognizer_2022JP(),
newRecognizer_2022KR(),
newRecognizer_2022CN(),
newRecognizer_IBM424_he_rtl(),
newRecognizer_IBM424_he_ltr(),
newRecognizer_IBM420_ar_rtl(),
newRecognizer_IBM420_ar_ltr(),
}
// NewTextDetector creates a Detector for plain text.
func NewTextDetector() *Detector {
return &Detector{recognizers, false}
}
// NewHtmlDetector creates a Detector for Html.
func NewHtmlDetector() *Detector {
return &Detector{recognizers, true}
}
var (
NotDetectedError = errors.New("Charset not detected.")
)
// DetectBest returns the Result with highest Confidence.
func (d *Detector) DetectBest(b []byte) (r *Result, err error) {
var all []Result
if all, err = d.DetectAll(b); err == nil {
r = &all[0]
}
return
}
// DetectAll returns all Results which have non-zero Confidence. The Results are sorted by Confidence in descending order.
func (d *Detector) DetectAll(b []byte) ([]Result, error) {
input := newRecognizerInput(b, d.stripTag)
outputChan := make(chan recognizerOutput)
for _, r := range d.recognizers {
go matchHelper(r, input, outputChan)
}
outputs := make([]recognizerOutput, 0, len(d.recognizers))
for i := 0; i < len(d.recognizers); i++ {
o := <-outputChan
if o.Confidence > 0 {
outputs = append(outputs, o)
}
}
if len(outputs) == 0 {
return nil, NotDetectedError
}
sort.Sort(recognizerOutputs(outputs))
dedupOutputs := make([]Result, 0, len(outputs))
foundCharsets := make(map[string]struct{}, len(outputs))
for _, o := range outputs {
if _, found := foundCharsets[o.Charset]; !found {
dedupOutputs = append(dedupOutputs, Result(o))
foundCharsets[o.Charset] = struct{}{}
}
}
if len(dedupOutputs) == 0 {
return nil, NotDetectedError
}
return dedupOutputs, nil
}
func matchHelper(r recognizer, input *recognizerInput, outputChan chan<- recognizerOutput) {
outputChan <- r.Match(input)
}
type recognizerOutputs []recognizerOutput
func (r recognizerOutputs) Len() int { return len(r) }
func (r recognizerOutputs) Less(i, j int) bool { return r[i].Confidence > r[j].Confidence }
func (r recognizerOutputs) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
================================================
FILE: detector_test.go
================================================
package chardet_test
import (
"github.com/saintfish/chardet"
"io"
"os"
"path/filepath"
"testing"
)
func TestDetector(t *testing.T) {
type file_charset_language struct {
File string
IsHtml bool
Charset string
Language string
}
var data = []file_charset_language{
{"utf8.html", true, "UTF-8", ""},
{"utf8_bom.html", true, "UTF-8", ""},
{"8859_1_en.html", true, "ISO-8859-1", "en"},
{"8859_1_da.html", true, "ISO-8859-1", "da"},
{"8859_1_de.html", true, "ISO-8859-1", "de"},
{"8859_1_es.html", true, "ISO-8859-1", "es"},
{"8859_1_fr.html", true, "ISO-8859-1", "fr"},
{"8859_1_pt.html", true, "ISO-8859-1", "pt"},
{"shift_jis.html", true, "Shift_JIS", "ja"},
{"gb18030.html", true, "GB-18030", "zh"},
{"euc_jp.html", true, "EUC-JP", "ja"},
{"euc_kr.html", true, "EUC-KR", "ko"},
{"big5.html", true, "Big5", "zh"},
}
textDetector := chardet.NewTextDetector()
htmlDetector := chardet.NewHtmlDetector()
buffer := make([]byte, 32<<10)
for _, d := range data {
f, err := os.Open(filepath.Join("testdata", d.File))
if err != nil {
t.Fatal(err)
}
defer f.Close()
size, _ := io.ReadFull(f, buffer)
input := buffer[:size]
var detector = textDetector
if d.IsHtml {
detector = htmlDetector
}
result, err := detector.DetectBest(input)
if err != nil {
t.Fatal(err)
}
if result.Charset != d.Charset {
t.Errorf("Expected charset %s, actual %s", d.Charset, result.Charset)
}
if result.Language != d.Language {
t.Errorf("Expected language %s, actual %s", d.Language, result.Language)
}
}
}
================================================
FILE: example_test.go
================================================
package chardet_test
import (
"fmt"
"github.com/saintfish/chardet"
)
var (
zh_gb18030_text = []byte{
71, 111, 202, 199, 71, 111, 111, 103, 108, 101, 233, 95, 176, 108, 181, 196, 210, 187, 214, 214, 190, 142, 215, 103, 208, 205, 163, 172, 129, 75, 176, 108,
208, 205, 163, 172, 178, 162, 190, 223, 211, 208, 192, 172, 187, 248, 187, 216, 202, 213, 185, 166, 196, 220, 181, 196, 177, 224, 179, 204, 211, 239, 209, 212,
161, 163, 10,
}
)
func ExampleTextDetector() {
detector := chardet.NewTextDetector()
result, err := detector.DetectBest(zh_gb18030_text)
if err == nil {
fmt.Printf(
"Detected charset is %s, language is %s",
result.Charset,
result.Language)
}
// Output:
// Detected charset is GB-18030, language is zh
}
================================================
FILE: icu-license.html
================================================
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></meta>
<title>ICU License - ICU 1.8.1 and later</title>
</head>
<body BGCOLOR="#ffffff">
<h2>ICU License - ICU 1.8.1 and later</h2>
<p>COPYRIGHT AND PERMISSION NOTICE</p>
<p>
Copyright (c) 1995-2012 International Business Machines Corporation and others
</p>
<p>
All rights reserved.
</p>
<p>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, and/or sell
copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies
of the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.
</p>
<p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR PERFORMANCE OF THIS SOFTWARE.
</p>
<p>
Except as contained in this notice, the name of a copyright holder shall not be
used in advertising or otherwise to promote the sale, use or other dealings in
this Software without prior written authorization of the copyright holder.
</p>
<hr>
<p><small>
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
</small></p>
</body>
</html>
================================================
FILE: multi_byte.go
================================================
package chardet
import (
"errors"
"math"
)
type recognizerMultiByte struct {
charset string
language string
decoder charDecoder
commonChars []uint16
}
type charDecoder interface {
DecodeOneChar([]byte) (c uint16, remain []byte, err error)
}
func (r *recognizerMultiByte) Match(input *recognizerInput) (output recognizerOutput) {
return recognizerOutput{
Charset: r.charset,
Language: r.language,
Confidence: r.matchConfidence(input),
}
}
func (r *recognizerMultiByte) matchConfidence(input *recognizerInput) int {
raw := input.raw
var c uint16
var err error
var totalCharCount, badCharCount, singleByteCharCount, doubleByteCharCount, commonCharCount int
for c, raw, err = r.decoder.DecodeOneChar(raw); len(raw) > 0; c, raw, err = r.decoder.DecodeOneChar(raw) {
totalCharCount++
if err != nil {
badCharCount++
} else if c <= 0xFF {
singleByteCharCount++
} else {
doubleByteCharCount++
if r.commonChars != nil && binarySearch(r.commonChars, c) {
commonCharCount++
}
}
if badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount {
return 0
}
}
if doubleByteCharCount <= 10 && badCharCount == 0 {
if doubleByteCharCount == 0 && totalCharCount < 10 {
return 0
} else {
return 10
}
}
if doubleByteCharCount < 20*badCharCount {
return 0
}
if r.commonChars == nil {
confidence := 30 + doubleByteCharCount - 20*badCharCount
if confidence > 100 {
confidence = 100
}
return confidence
}
maxVal := math.Log(float64(doubleByteCharCount) / 4)
scaleFactor := 90 / maxVal
confidence := int(math.Log(float64(commonCharCount)+1)*scaleFactor + 10)
if confidence > 100 {
confidence = 100
}
if confidence < 0 {
confidence = 0
}
return confidence
}
func binarySearch(l []uint16, c uint16) bool {
start := 0
end := len(l) - 1
for start <= end {
mid := (start + end) / 2
if c == l[mid] {
return true
} else if c < l[mid] {
end = mid - 1
} else {
start = mid + 1
}
}
return false
}
var eobError = errors.New("End of input buffer")
var badCharError = errors.New("Decode a bad char")
type charDecoder_sjis struct {
}
func (charDecoder_sjis) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) {
if len(input) == 0 {
return 0, nil, eobError
}
first := input[0]
c = uint16(first)
remain = input[1:]
if first <= 0x7F || (first > 0xA0 && first <= 0xDF) {
return
}
if len(remain) == 0 {
return c, remain, badCharError
}
second := remain[0]
remain = remain[1:]
c = c<<8 | uint16(second)
if (second >= 0x40 && second <= 0x7F) || (second >= 0x80 && second <= 0xFE) {
} else {
err = badCharError
}
return
}
var commonChars_sjis = []uint16{
0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0,
0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5,
0x82b7, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c5, 0x82c6, 0x82c8, 0x82c9, 0x82cc,
0x82cd, 0x82dc, 0x82e0, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82f0, 0x82f1, 0x8341,
0x8343, 0x834e, 0x834f, 0x8358, 0x835e, 0x8362, 0x8367, 0x8375, 0x8376, 0x8389,
0x838a, 0x838b, 0x838d, 0x8393, 0x8e96, 0x93fa, 0x95aa,
}
func newRecognizer_sjis() *recognizerMultiByte {
return &recognizerMultiByte{
"Shift_JIS",
"ja",
charDecoder_sjis{},
commonChars_sjis,
}
}
type charDecoder_euc struct {
}
func (charDecoder_euc) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) {
if len(input) == 0 {
return 0, nil, eobError
}
first := input[0]
remain = input[1:]
c = uint16(first)
if first <= 0x8D {
return uint16(first), remain, nil
}
if len(remain) == 0 {
return 0, nil, eobError
}
second := remain[0]
remain = remain[1:]
c = c<<8 | uint16(second)
if first >= 0xA1 && first <= 0xFE {
if second < 0xA1 {
err = badCharError
}
return
}
if first == 0x8E {
if second < 0xA1 {
err = badCharError
}
return
}
if first == 0x8F {
if len(remain) == 0 {
return 0, nil, eobError
}
third := remain[0]
remain = remain[1:]
c = c<<0 | uint16(third)
if third < 0xa1 {
err = badCharError
}
}
return
}
var commonChars_euc_jp = []uint16{
0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2,
0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3,
0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c3, 0xa4c4,
0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4de,
0xa4df, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ef,
0xa4f2, 0xa4f3, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a6, 0xa5a7, 0xa5aa, 0xa5ad, 0xa5af,
0xa5b0, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5bf, 0xa5c3, 0xa5c6, 0xa5c7,
0xa5c8, 0xa5c9, 0xa5cb, 0xa5d0, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5de, 0xa5e0, 0xa5e1,
0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee,
0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1,
}
var commonChars_euc_kr = []uint16{
0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc,
0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9,
0xb4eb, 0xb5a5, 0xb5b5, 0xb5bf, 0xb5c7, 0xb5e9, 0xb6f3, 0xb7af, 0xb7c2, 0xb7ce,
0xb8a6, 0xb8ae, 0xb8b6, 0xb8b8, 0xb8bb, 0xb8e9, 0xb9ab, 0xb9ae, 0xb9cc, 0xb9ce,
0xb9fd, 0xbab8, 0xbace, 0xbad0, 0xbaf1, 0xbbe7, 0xbbf3, 0xbbfd, 0xbcad, 0xbcba,
0xbcd2, 0xbcf6, 0xbdba, 0xbdc0, 0xbdc3, 0xbdc5, 0xbec6, 0xbec8, 0xbedf, 0xbeee,
0xbef8, 0xbefa, 0xbfa1, 0xbfa9, 0xbfc0, 0xbfe4, 0xbfeb, 0xbfec, 0xbff8, 0xc0a7,
0xc0af, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0c7, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d6,
0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6,
0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad,
}
func newRecognizer_euc_jp() *recognizerMultiByte {
return &recognizerMultiByte{
"EUC-JP",
"ja",
charDecoder_euc{},
commonChars_euc_jp,
}
}
func newRecognizer_euc_kr() *recognizerMultiByte {
return &recognizerMultiByte{
"EUC-KR",
"ko",
charDecoder_euc{},
commonChars_euc_kr,
}
}
type charDecoder_big5 struct {
}
func (charDecoder_big5) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) {
if len(input) == 0 {
return 0, nil, eobError
}
first := input[0]
remain = input[1:]
c = uint16(first)
if first <= 0x7F || first == 0xFF {
return
}
if len(remain) == 0 {
return c, nil, eobError
}
second := remain[0]
remain = remain[1:]
c = c<<8 | uint16(second)
if second < 0x40 || second == 0x7F || second == 0xFF {
err = badCharError
}
return
}
var commonChars_big5 = []uint16{
0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446,
0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3,
0xa4a4, 0xa4a7, 0xa4c1, 0xa4ce, 0xa4d1, 0xa4df, 0xa4e8, 0xa4fd, 0xa540, 0xa548,
0xa558, 0xa569, 0xa5cd, 0xa5e7, 0xa657, 0xa661, 0xa662, 0xa668, 0xa670, 0xa6a8,
0xa6b3, 0xa6b9, 0xa6d3, 0xa6db, 0xa6e6, 0xa6f2, 0xa740, 0xa751, 0xa759, 0xa7da,
0xa8a3, 0xa8a5, 0xa8ad, 0xa8d1, 0xa8d3, 0xa8e4, 0xa8fc, 0xa9c0, 0xa9d2, 0xa9f3,
0xaa6b, 0xaaba, 0xaabe, 0xaacc, 0xaafc, 0xac47, 0xac4f, 0xacb0, 0xacd2, 0xad59,
0xaec9, 0xafe0, 0xb0ea, 0xb16f, 0xb2b3, 0xb2c4, 0xb36f, 0xb44c, 0xb44e, 0xb54c,
0xb5a5, 0xb5bd, 0xb5d0, 0xb5d8, 0xb671, 0xb7ed, 0xb867, 0xb944, 0xbad8, 0xbb44,
0xbba1, 0xbdd1, 0xc2c4, 0xc3b9, 0xc440, 0xc45f,
}
func newRecognizer_big5() *recognizerMultiByte {
return &recognizerMultiByte{
"Big5",
"zh",
charDecoder_big5{},
commonChars_big5,
}
}
type charDecoder_gb_18030 struct {
}
func (charDecoder_gb_18030) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) {
if len(input) == 0 {
return 0, nil, eobError
}
first := input[0]
remain = input[1:]
c = uint16(first)
if first <= 0x80 {
return
}
if len(remain) == 0 {
return 0, nil, eobError
}
second := remain[0]
remain = remain[1:]
c = c<<8 | uint16(second)
if first >= 0x81 && first <= 0xFE {
if (second >= 0x40 && second <= 0x7E) || (second >= 0x80 && second <= 0xFE) {
return
}
if second >= 0x30 && second <= 0x39 {
if len(remain) == 0 {
return 0, nil, eobError
}
third := remain[0]
remain = remain[1:]
if third >= 0x81 && third <= 0xFE {
if len(remain) == 0 {
return 0, nil, eobError
}
fourth := remain[0]
remain = remain[1:]
if fourth >= 0x30 && fourth <= 0x39 {
c = c<<16 | uint16(third)<<8 | uint16(fourth)
return
}
}
}
err = badCharError
}
return
}
var commonChars_gb_18030 = []uint16{
0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac,
0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4,
0xb5e3, 0xb6af, 0xb6d4, 0xb6e0, 0xb7a2, 0xb7a8, 0xb7bd, 0xb7d6, 0xb7dd, 0xb8b4,
0xb8df, 0xb8f6, 0xb9ab, 0xb9c9, 0xb9d8, 0xb9fa, 0xb9fd, 0xbacd, 0xbba7, 0xbbd6,
0xbbe1, 0xbbfa, 0xbcbc, 0xbcdb, 0xbcfe, 0xbdcc, 0xbecd, 0xbedd, 0xbfb4, 0xbfc6,
0xbfc9, 0xc0b4, 0xc0ed, 0xc1cb, 0xc2db, 0xc3c7, 0xc4dc, 0xc4ea, 0xc5cc, 0xc6f7,
0xc7f8, 0xc8ab, 0xc8cb, 0xc8d5, 0xc8e7, 0xc9cf, 0xc9fa, 0xcab1, 0xcab5, 0xcac7,
0xcad0, 0xcad6, 0xcaf5, 0xcafd, 0xccec, 0xcdf8, 0xceaa, 0xcec4, 0xced2, 0xcee5,
0xcfb5, 0xcfc2, 0xcfd6, 0xd0c2, 0xd0c5, 0xd0d0, 0xd0d4, 0xd1a7, 0xd2aa, 0xd2b2,
0xd2b5, 0xd2bb, 0xd2d4, 0xd3c3, 0xd3d0, 0xd3fd, 0xd4c2, 0xd4da, 0xd5e2, 0xd6d0,
}
func newRecognizer_gb_18030() *recognizerMultiByte {
return &recognizerMultiByte{
"GB-18030",
"zh",
charDecoder_gb_18030{},
commonChars_gb_18030,
}
}
================================================
FILE: recognizer.go
================================================
package chardet
type recognizer interface {
Match(*recognizerInput) recognizerOutput
}
type recognizerOutput Result
type recognizerInput struct {
raw []byte
input []byte
tagStripped bool
byteStats []int
hasC1Bytes bool
}
func newRecognizerInput(raw []byte, stripTag bool) *recognizerInput {
input, stripped := mayStripInput(raw, stripTag)
byteStats := computeByteStats(input)
return &recognizerInput{
raw: raw,
input: input,
tagStripped: stripped,
byteStats: byteStats,
hasC1Bytes: computeHasC1Bytes(byteStats),
}
}
func mayStripInput(raw []byte, stripTag bool) (out []byte, stripped bool) {
const inputBufferSize = 8192
out = make([]byte, 0, inputBufferSize)
var badTags, openTags int32
var inMarkup bool = false
stripped = false
if stripTag {
stripped = true
for _, c := range raw {
if c == '<' {
if inMarkup {
badTags += 1
}
inMarkup = true
openTags += 1
}
if !inMarkup {
out = append(out, c)
if len(out) >= inputBufferSize {
break
}
}
if c == '>' {
inMarkup = false
}
}
}
if openTags < 5 || openTags/5 < badTags || (len(out) < 100 && len(raw) > 600) {
limit := len(raw)
if limit > inputBufferSize {
limit = inputBufferSize
}
out = make([]byte, limit)
copy(out, raw[:limit])
stripped = false
}
return
}
func computeByteStats(input []byte) []int {
r := make([]int, 256)
for _, c := range input {
r[c] += 1
}
return r
}
func computeHasC1Bytes(byteStats []int) bool {
for _, count := range byteStats[0x80 : 0x9F+1] {
if count > 0 {
return true
}
}
return false
}
================================================
FILE: single_byte.go
================================================
package chardet
// Recognizer for single byte charset family
type recognizerSingleByte struct {
charset string
hasC1ByteCharset string
language string
charMap *[256]byte
ngram *[64]uint32
}
func (r *recognizerSingleByte) Match(input *recognizerInput) recognizerOutput {
var charset string = r.charset
if input.hasC1Bytes && len(r.hasC1ByteCharset) > 0 {
charset = r.hasC1ByteCharset
}
return recognizerOutput{
Charset: charset,
Language: r.language,
Confidence: r.parseNgram(input.input),
}
}
type ngramState struct {
ngram uint32
ignoreSpace bool
ngramCount, ngramHit uint32
table *[64]uint32
}
func newNgramState(table *[64]uint32) *ngramState {
return &ngramState{
ngram: 0,
ignoreSpace: false,
ngramCount: 0,
ngramHit: 0,
table: table,
}
}
func (s *ngramState) AddByte(b byte) {
const ngramMask = 0xFFFFFF
if !(b == 0x20 && s.ignoreSpace) {
s.ngram = ((s.ngram << 8) | uint32(b)) & ngramMask
s.ignoreSpace = (s.ngram == 0x20)
s.ngramCount++
if s.lookup() {
s.ngramHit++
}
}
s.ignoreSpace = (b == 0x20)
}
func (s *ngramState) HitRate() float32 {
if s.ngramCount == 0 {
return 0
}
return float32(s.ngramHit) / float32(s.ngramCount)
}
func (s *ngramState) lookup() bool {
var index int
if s.table[index+32] <= s.ngram {
index += 32
}
if s.table[index+16] <= s.ngram {
index += 16
}
if s.table[index+8] <= s.ngram {
index += 8
}
if s.table[index+4] <= s.ngram {
index += 4
}
if s.table[index+2] <= s.ngram {
index += 2
}
if s.table[index+1] <= s.ngram {
index += 1
}
if s.table[index] > s.ngram {
index -= 1
}
if index < 0 || s.table[index] != s.ngram {
return false
}
return true
}
func (r *recognizerSingleByte) parseNgram(input []byte) int {
state := newNgramState(r.ngram)
for _, inChar := range input {
c := r.charMap[inChar]
if c != 0 {
state.AddByte(c)
}
}
state.AddByte(0x20)
rate := state.HitRate()
if rate > 0.33 {
return 98
}
return int(rate * 300)
}
var charMap_8859_1 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20,
0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
}
var ngrams_8859_1_en = [64]uint32{
0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F,
0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74,
0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420,
0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320,
}
var ngrams_8859_1_da = [64]uint32{
0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620,
0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320,
0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520,
0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572,
}
var ngrams_8859_1_de = [64]uint32{
0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F,
0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220,
0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465,
0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572,
}
var ngrams_8859_1_es = [64]uint32{
0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365,
0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C,
0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064,
0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20,
}
var ngrams_8859_1_fr = [64]uint32{
0x206175, 0x20636F, 0x206461, 0x206465, 0x206475, 0x20656E, 0x206574, 0x206C61, 0x206C65, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207365, 0x20736F, 0x20756E,
0x20E020, 0x616E74, 0x617469, 0x636520, 0x636F6E, 0x646520, 0x646573, 0x647520, 0x652061, 0x652063, 0x652064, 0x652065, 0x65206C, 0x652070, 0x652073, 0x656E20,
0x656E74, 0x657220, 0x657320, 0x657420, 0x657572, 0x696F6E, 0x697320, 0x697420, 0x6C6120, 0x6C6520, 0x6C6573, 0x6D656E, 0x6E2064, 0x6E6520, 0x6E7320, 0x6E7420,
0x6F6E20, 0x6F6E74, 0x6F7572, 0x717565, 0x72206C, 0x726520, 0x732061, 0x732064, 0x732065, 0x73206C, 0x732070, 0x742064, 0x746520, 0x74696F, 0x756520, 0x757220,
}
var ngrams_8859_1_it = [64]uint32{
0x20616C, 0x206368, 0x20636F, 0x206465, 0x206469, 0x206520, 0x20696C, 0x20696E, 0x206C61, 0x207065, 0x207072, 0x20756E, 0x612063, 0x612064, 0x612070, 0x612073,
0x61746F, 0x636865, 0x636F6E, 0x64656C, 0x646920, 0x652061, 0x652063, 0x652064, 0x652069, 0x65206C, 0x652070, 0x652073, 0x656C20, 0x656C6C, 0x656E74, 0x657220,
0x686520, 0x692061, 0x692063, 0x692064, 0x692073, 0x696120, 0x696C20, 0x696E20, 0x696F6E, 0x6C6120, 0x6C6520, 0x6C6920, 0x6C6C61, 0x6E6520, 0x6E6920, 0x6E6F20,
0x6E7465, 0x6F2061, 0x6F2064, 0x6F2069, 0x6F2073, 0x6F6E20, 0x6F6E65, 0x706572, 0x726120, 0x726520, 0x736920, 0x746120, 0x746520, 0x746920, 0x746F20, 0x7A696F,
}
var ngrams_8859_1_nl = [64]uint32{
0x20616C, 0x206265, 0x206461, 0x206465, 0x206469, 0x206565, 0x20656E, 0x206765, 0x206865, 0x20696E, 0x206D61, 0x206D65, 0x206F70, 0x207465, 0x207661, 0x207665,
0x20766F, 0x207765, 0x207A69, 0x61616E, 0x616172, 0x616E20, 0x616E64, 0x617220, 0x617420, 0x636874, 0x646520, 0x64656E, 0x646572, 0x652062, 0x652076, 0x65656E,
0x656572, 0x656E20, 0x657220, 0x657273, 0x657420, 0x67656E, 0x686574, 0x696520, 0x696E20, 0x696E67, 0x697320, 0x6E2062, 0x6E2064, 0x6E2065, 0x6E2068, 0x6E206F,
0x6E2076, 0x6E6465, 0x6E6720, 0x6F6E64, 0x6F6F72, 0x6F7020, 0x6F7220, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x76616E, 0x766572, 0x766F6F,
}
var ngrams_8859_1_no = [64]uint32{
0x206174, 0x206176, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207365, 0x20736B, 0x20736F, 0x207374, 0x207469,
0x207669, 0x20E520, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646574, 0x652073, 0x656420, 0x656E20, 0x656E65, 0x657220, 0x657265, 0x657420, 0x657474,
0x666F72, 0x67656E, 0x696B6B, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6520, 0x6C6C65, 0x6D6564, 0x6D656E, 0x6E2073, 0x6E6520, 0x6E6720, 0x6E6765, 0x6E6E65,
0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722073, 0x726520, 0x736F6D, 0x737465, 0x742073, 0x746520, 0x74656E, 0x746572, 0x74696C, 0x747420, 0x747465, 0x766572,
}
var ngrams_8859_1_pt = [64]uint32{
0x206120, 0x20636F, 0x206461, 0x206465, 0x20646F, 0x206520, 0x206573, 0x206D61, 0x206E6F, 0x206F20, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365,
0x20756D, 0x612061, 0x612063, 0x612064, 0x612070, 0x616465, 0x61646F, 0x616C20, 0x617220, 0x617261, 0x617320, 0x636F6D, 0x636F6E, 0x646120, 0x646520, 0x646F20,
0x646F73, 0x652061, 0x652064, 0x656D20, 0x656E74, 0x657320, 0x657374, 0x696120, 0x696361, 0x6D656E, 0x6E7465, 0x6E746F, 0x6F2061, 0x6F2063, 0x6F2064, 0x6F2065,
0x6F2070, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732061, 0x732064, 0x732065, 0x732070, 0x737461, 0x746520, 0x746F20, 0x756520, 0xE36F20, 0xE7E36F,
}
var ngrams_8859_1_sv = [64]uint32{
0x206174, 0x206176, 0x206465, 0x20656E, 0x2066F6, 0x206861, 0x206920, 0x20696E, 0x206B6F, 0x206D65, 0x206F63, 0x2070E5, 0x20736B, 0x20736F, 0x207374, 0x207469,
0x207661, 0x207669, 0x20E472, 0x616465, 0x616E20, 0x616E64, 0x617220, 0x617474, 0x636820, 0x646520, 0x64656E, 0x646572, 0x646574, 0x656420, 0x656E20, 0x657220,
0x657420, 0x66F672, 0x67656E, 0x696C6C, 0x696E67, 0x6B6120, 0x6C6C20, 0x6D6564, 0x6E2073, 0x6E6120, 0x6E6465, 0x6E6720, 0x6E6765, 0x6E696E, 0x6F6368, 0x6F6D20,
0x6F6E20, 0x70E520, 0x722061, 0x722073, 0x726120, 0x736B61, 0x736F6D, 0x742073, 0x746120, 0x746520, 0x746572, 0x74696C, 0x747420, 0x766172, 0xE47220, 0xF67220,
}
func newRecognizer_8859_1(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-1",
hasC1ByteCharset: "windows-1252",
language: language,
charMap: &charMap_8859_1,
ngram: ngram,
}
}
func newRecognizer_8859_1_en() *recognizerSingleByte {
return newRecognizer_8859_1("en", &ngrams_8859_1_en)
}
func newRecognizer_8859_1_da() *recognizerSingleByte {
return newRecognizer_8859_1("da", &ngrams_8859_1_da)
}
func newRecognizer_8859_1_de() *recognizerSingleByte {
return newRecognizer_8859_1("de", &ngrams_8859_1_de)
}
func newRecognizer_8859_1_es() *recognizerSingleByte {
return newRecognizer_8859_1("es", &ngrams_8859_1_es)
}
func newRecognizer_8859_1_fr() *recognizerSingleByte {
return newRecognizer_8859_1("fr", &ngrams_8859_1_fr)
}
func newRecognizer_8859_1_it() *recognizerSingleByte {
return newRecognizer_8859_1("it", &ngrams_8859_1_it)
}
func newRecognizer_8859_1_nl() *recognizerSingleByte {
return newRecognizer_8859_1("nl", &ngrams_8859_1_nl)
}
func newRecognizer_8859_1_no() *recognizerSingleByte {
return newRecognizer_8859_1("no", &ngrams_8859_1_no)
}
func newRecognizer_8859_1_pt() *recognizerSingleByte {
return newRecognizer_8859_1("pt", &ngrams_8859_1_pt)
}
func newRecognizer_8859_1_sv() *recognizerSingleByte {
return newRecognizer_8859_1("sv", &ngrams_8859_1_sv)
}
var charMap_8859_2 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20,
0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF,
0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7,
0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20,
}
var ngrams_8859_2_cs = [64]uint32{
0x206120, 0x206279, 0x20646F, 0x206A65, 0x206E61, 0x206E65, 0x206F20, 0x206F64, 0x20706F, 0x207072, 0x2070F8, 0x20726F, 0x207365, 0x20736F, 0x207374, 0x20746F,
0x207620, 0x207679, 0x207A61, 0x612070, 0x636520, 0x636820, 0x652070, 0x652073, 0x652076, 0x656D20, 0x656EED, 0x686F20, 0x686F64, 0x697374, 0x6A6520, 0x6B7465,
0x6C6520, 0x6C6920, 0x6E6120, 0x6EE920, 0x6EEC20, 0x6EED20, 0x6F2070, 0x6F646E, 0x6F6A69, 0x6F7374, 0x6F7520, 0x6F7661, 0x706F64, 0x706F6A, 0x70726F, 0x70F865,
0x736520, 0x736F75, 0x737461, 0x737469, 0x73746E, 0x746572, 0x746EED, 0x746F20, 0x752070, 0xBE6520, 0xE16EED, 0xE9686F, 0xED2070, 0xED2073, 0xED6D20, 0xF86564,
}
var ngrams_8859_2_hu = [64]uint32{
0x206120, 0x20617A, 0x206265, 0x206567, 0x20656C, 0x206665, 0x206861, 0x20686F, 0x206973, 0x206B65, 0x206B69, 0x206BF6, 0x206C65, 0x206D61, 0x206D65, 0x206D69,
0x206E65, 0x20737A, 0x207465, 0x20E973, 0x612061, 0x61206B, 0x61206D, 0x612073, 0x616B20, 0x616E20, 0x617A20, 0x62616E, 0x62656E, 0x656779, 0x656B20, 0x656C20,
0x656C65, 0x656D20, 0x656E20, 0x657265, 0x657420, 0x657465, 0x657474, 0x677920, 0x686F67, 0x696E74, 0x697320, 0x6B2061, 0x6BF67A, 0x6D6567, 0x6D696E, 0x6E2061,
0x6E616B, 0x6E656B, 0x6E656D, 0x6E7420, 0x6F6779, 0x732061, 0x737A65, 0x737A74, 0x737AE1, 0x73E967, 0x742061, 0x747420, 0x74E173, 0x7A6572, 0xE16E20, 0xE97320,
}
var ngrams_8859_2_pl = [64]uint32{
0x20637A, 0x20646F, 0x206920, 0x206A65, 0x206B6F, 0x206D61, 0x206D69, 0x206E61, 0x206E69, 0x206F64, 0x20706F, 0x207072, 0x207369, 0x207720, 0x207769, 0x207779,
0x207A20, 0x207A61, 0x612070, 0x612077, 0x616E69, 0x636820, 0x637A65, 0x637A79, 0x646F20, 0x647A69, 0x652070, 0x652073, 0x652077, 0x65207A, 0x65676F, 0x656A20,
0x656D20, 0x656E69, 0x676F20, 0x696120, 0x696520, 0x69656A, 0x6B6120, 0x6B6920, 0x6B6965, 0x6D6965, 0x6E6120, 0x6E6961, 0x6E6965, 0x6F2070, 0x6F7761, 0x6F7769,
0x706F6C, 0x707261, 0x70726F, 0x70727A, 0x727A65, 0x727A79, 0x7369EA, 0x736B69, 0x737461, 0x776965, 0x796368, 0x796D20, 0x7A6520, 0x7A6965, 0x7A7920, 0xF37720,
}
var ngrams_8859_2_ro = [64]uint32{
0x206120, 0x206163, 0x206361, 0x206365, 0x20636F, 0x206375, 0x206465, 0x206469, 0x206C61, 0x206D61, 0x207065, 0x207072, 0x207365, 0x2073E3, 0x20756E, 0x20BA69,
0x20EE6E, 0x612063, 0x612064, 0x617265, 0x617420, 0x617465, 0x617520, 0x636172, 0x636F6E, 0x637520, 0x63E320, 0x646520, 0x652061, 0x652063, 0x652064, 0x652070,
0x652073, 0x656120, 0x656920, 0x656C65, 0x656E74, 0x657374, 0x692061, 0x692063, 0x692064, 0x692070, 0x696520, 0x696920, 0x696E20, 0x6C6120, 0x6C6520, 0x6C6F72,
0x6C7569, 0x6E6520, 0x6E7472, 0x6F7220, 0x70656E, 0x726520, 0x726561, 0x727520, 0x73E320, 0x746520, 0x747275, 0x74E320, 0x756920, 0x756C20, 0xBA6920, 0xEE6E20,
}
func newRecognizer_8859_2(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-2",
hasC1ByteCharset: "windows-1250",
language: language,
charMap: &charMap_8859_2,
ngram: ngram,
}
}
func newRecognizer_8859_2_cs() *recognizerSingleByte {
return newRecognizer_8859_1("cs", &ngrams_8859_2_cs)
}
func newRecognizer_8859_2_hu() *recognizerSingleByte {
return newRecognizer_8859_1("hu", &ngrams_8859_2_hu)
}
func newRecognizer_8859_2_pl() *recognizerSingleByte {
return newRecognizer_8859_1("pl", &ngrams_8859_2_pl)
}
func newRecognizer_8859_2_ro() *recognizerSingleByte {
return newRecognizer_8859_1("ro", &ngrams_8859_2_ro)
}
var charMap_8859_5 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF,
}
var ngrams_8859_5_ru = [64]uint32{
0x20D220, 0x20D2DE, 0x20D4DE, 0x20D7D0, 0x20D820, 0x20DAD0, 0x20DADE, 0x20DDD0, 0x20DDD5, 0x20DED1, 0x20DFDE, 0x20DFE0, 0x20E0D0, 0x20E1DE, 0x20E1E2, 0x20E2DE,
0x20E7E2, 0x20EDE2, 0xD0DDD8, 0xD0E2EC, 0xD3DE20, 0xD5DBEC, 0xD5DDD8, 0xD5E1E2, 0xD5E220, 0xD820DF, 0xD8D520, 0xD8D820, 0xD8EF20, 0xDBD5DD, 0xDBD820, 0xDBECDD,
0xDDD020, 0xDDD520, 0xDDD8D5, 0xDDD8EF, 0xDDDE20, 0xDDDED2, 0xDE20D2, 0xDE20DF, 0xDE20E1, 0xDED220, 0xDED2D0, 0xDED3DE, 0xDED920, 0xDEDBEC, 0xDEDC20, 0xDEE1E2,
0xDFDEDB, 0xDFE0D5, 0xDFE0D8, 0xDFE0DE, 0xE0D0D2, 0xE0D5D4, 0xE1E2D0, 0xE1E2D2, 0xE1E2D8, 0xE1EF20, 0xE2D5DB, 0xE2DE20, 0xE2DEE0, 0xE2EC20, 0xE7E2DE, 0xEBE520,
}
func newRecognizer_8859_5(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-5",
language: language,
charMap: &charMap_8859_5,
ngram: ngram,
}
}
func newRecognizer_8859_5_ru() *recognizerSingleByte {
return newRecognizer_8859_5("ru", &ngrams_8859_5_ru)
}
var charMap_8859_6 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
}
var ngrams_8859_6_ar = [64]uint32{
0x20C7E4, 0x20C7E6, 0x20C8C7, 0x20D9E4, 0x20E1EA, 0x20E4E4, 0x20E5E6, 0x20E8C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E420, 0xC7E4C3, 0xC7E4C7, 0xC7E4C8,
0xC7E4CA, 0xC7E4CC, 0xC7E4CD, 0xC7E4CF, 0xC7E4D3, 0xC7E4D9, 0xC7E4E2, 0xC7E4E5, 0xC7E4E8, 0xC7E4EA, 0xC7E520, 0xC7E620, 0xC7E6CA, 0xC820C7, 0xC920C7, 0xC920E1,
0xC920E4, 0xC920E5, 0xC920E8, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xD920C7, 0xD9E4E9, 0xE1EA20, 0xE420C7, 0xE4C920, 0xE4E920, 0xE4EA20,
0xE520C7, 0xE5C720, 0xE5C920, 0xE5E620, 0xE620C7, 0xE720C7, 0xE7C720, 0xE8C7E4, 0xE8E620, 0xE920C7, 0xEA20C7, 0xEA20E5, 0xEA20E8, 0xEAC920, 0xEAD120, 0xEAE620,
}
func newRecognizer_8859_6(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-6",
language: language,
charMap: &charMap_8859_6,
ngram: ngram,
}
}
func newRecognizer_8859_6_ar() *recognizerSingleByte {
return newRecognizer_8859_6("ar", &ngrams_8859_6_ar)
}
var charMap_8859_7 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20,
0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE,
0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20,
}
var ngrams_8859_7_el = [64]uint32{
0x20E1ED, 0x20E1F0, 0x20E3E9, 0x20E4E9, 0x20E5F0, 0x20E720, 0x20EAE1, 0x20ECE5, 0x20EDE1, 0x20EF20, 0x20F0E1, 0x20F0EF, 0x20F0F1, 0x20F3F4, 0x20F3F5, 0x20F4E7,
0x20F4EF, 0xDFE120, 0xE120E1, 0xE120F4, 0xE1E920, 0xE1ED20, 0xE1F0FC, 0xE1F220, 0xE3E9E1, 0xE5E920, 0xE5F220, 0xE720F4, 0xE7ED20, 0xE7F220, 0xE920F4, 0xE9E120,
0xE9EADE, 0xE9F220, 0xEAE1E9, 0xEAE1F4, 0xECE520, 0xED20E1, 0xED20E5, 0xED20F0, 0xEDE120, 0xEFF220, 0xEFF520, 0xF0EFF5, 0xF0F1EF, 0xF0FC20, 0xF220E1, 0xF220E5,
0xF220EA, 0xF220F0, 0xF220F4, 0xF3E520, 0xF3E720, 0xF3F4EF, 0xF4E120, 0xF4E1E9, 0xF4E7ED, 0xF4E7F2, 0xF4E9EA, 0xF4EF20, 0xF4EFF5, 0xF4F9ED, 0xF9ED20, 0xFEED20,
}
func newRecognizer_8859_7(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-7",
hasC1ByteCharset: "windows-1253",
language: language,
charMap: &charMap_8859_7,
ngram: ngram,
}
}
func newRecognizer_8859_7_el() *recognizerSingleByte {
return newRecognizer_8859_7("el", &ngrams_8859_7_el)
}
var charMap_8859_8 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0x20, 0x20, 0x20, 0x20, 0x20,
}
var ngrams_8859_8_I_he = [64]uint32{
0x20E0E5, 0x20E0E7, 0x20E0E9, 0x20E0FA, 0x20E1E9, 0x20E1EE, 0x20E4E0, 0x20E4E5, 0x20E4E9, 0x20E4EE, 0x20E4F2, 0x20E4F9, 0x20E4FA, 0x20ECE0, 0x20ECE4, 0x20EEE0,
0x20F2EC, 0x20F9EC, 0xE0FA20, 0xE420E0, 0xE420E1, 0xE420E4, 0xE420EC, 0xE420EE, 0xE420F9, 0xE4E5E0, 0xE5E020, 0xE5ED20, 0xE5EF20, 0xE5F820, 0xE5FA20, 0xE920E4,
0xE9E420, 0xE9E5FA, 0xE9E9ED, 0xE9ED20, 0xE9EF20, 0xE9F820, 0xE9FA20, 0xEC20E0, 0xEC20E4, 0xECE020, 0xECE420, 0xED20E0, 0xED20E1, 0xED20E4, 0xED20EC, 0xED20EE,
0xED20F9, 0xEEE420, 0xEF20E4, 0xF0E420, 0xF0E920, 0xF0E9ED, 0xF2EC20, 0xF820E4, 0xF8E9ED, 0xF9EC20, 0xFA20E0, 0xFA20E1, 0xFA20E4, 0xFA20EC, 0xFA20EE, 0xFA20F9,
}
var ngrams_8859_8_he = [64]uint32{
0x20E0E5, 0x20E0EC, 0x20E4E9, 0x20E4EC, 0x20E4EE, 0x20E4F0, 0x20E9F0, 0x20ECF2, 0x20ECF9, 0x20EDE5, 0x20EDE9, 0x20EFE5, 0x20EFE9, 0x20F8E5, 0x20F8E9, 0x20FAE0,
0x20FAE5, 0x20FAE9, 0xE020E4, 0xE020EC, 0xE020ED, 0xE020FA, 0xE0E420, 0xE0E5E4, 0xE0EC20, 0xE0EE20, 0xE120E4, 0xE120ED, 0xE120FA, 0xE420E4, 0xE420E9, 0xE420EC,
0xE420ED, 0xE420EF, 0xE420F8, 0xE420FA, 0xE4EC20, 0xE5E020, 0xE5E420, 0xE7E020, 0xE9E020, 0xE9E120, 0xE9E420, 0xEC20E4, 0xEC20ED, 0xEC20FA, 0xECF220, 0xECF920,
0xEDE9E9, 0xEDE9F0, 0xEDE9F8, 0xEE20E4, 0xEE20ED, 0xEE20FA, 0xEEE120, 0xEEE420, 0xF2E420, 0xF920E4, 0xF920ED, 0xF920FA, 0xF9E420, 0xFAE020, 0xFAE420, 0xFAE5E9,
}
func newRecognizer_8859_8(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-8",
hasC1ByteCharset: "windows-1255",
language: language,
charMap: &charMap_8859_8,
ngram: ngram,
}
}
func newRecognizer_8859_8_I_he() *recognizerSingleByte {
r := newRecognizer_8859_8("he", &ngrams_8859_8_I_he)
r.charset = "ISO-8859-8-I"
return r
}
func newRecognizer_8859_8_he() *recognizerSingleByte {
return newRecognizer_8859_8("he", &ngrams_8859_8_he)
}
var charMap_8859_9 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20,
0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 0xFE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
}
var ngrams_8859_9_tr = [64]uint32{
0x206261, 0x206269, 0x206275, 0x206461, 0x206465, 0x206765, 0x206861, 0x20696C, 0x206B61, 0x206B6F, 0x206D61, 0x206F6C, 0x207361, 0x207461, 0x207665, 0x207961,
0x612062, 0x616B20, 0x616C61, 0x616D61, 0x616E20, 0x616EFD, 0x617220, 0x617261, 0x6172FD, 0x6173FD, 0x617961, 0x626972, 0x646120, 0x646520, 0x646920, 0x652062,
0x65206B, 0x656469, 0x656E20, 0x657220, 0x657269, 0x657369, 0x696C65, 0x696E20, 0x696E69, 0x697220, 0x6C616E, 0x6C6172, 0x6C6520, 0x6C6572, 0x6E2061, 0x6E2062,
0x6E206B, 0x6E6461, 0x6E6465, 0x6E6520, 0x6E6920, 0x6E696E, 0x6EFD20, 0x72696E, 0x72FD6E, 0x766520, 0x796120, 0x796F72, 0xFD6E20, 0xFD6E64, 0xFD6EFD, 0xFDF0FD,
}
func newRecognizer_8859_9(language string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: "ISO-8859-9",
hasC1ByteCharset: "windows-1254",
language: language,
charMap: &charMap_8859_9,
ngram: ngram,
}
}
func newRecognizer_8859_9_tr() *recognizerSingleByte {
return newRecognizer_8859_9("tr", &ngrams_8859_9_tr)
}
var charMap_windows_1256 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20,
0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F,
0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20,
0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20,
0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF,
}
var ngrams_windows_1256 = [64]uint32{
0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8,
0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD,
0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20,
0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420,
}
func newRecognizer_windows_1256() *recognizerSingleByte {
return &recognizerSingleByte{
charset: "windows-1256",
language: "ar",
charMap: &charMap_windows_1256,
ngram: &ngrams_windows_1256,
}
}
var charMap_windows_1251 = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F,
0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F,
0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20,
0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF,
0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20,
0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
}
var ngrams_windows_1251 = [64]uint32{
0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE,
0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED,
0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2,
0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520,
}
func newRecognizer_windows_1251() *recognizerSingleByte {
return &recognizerSingleByte{
charset: "windows-1251",
language: "ar",
charMap: &charMap_windows_1251,
ngram: &ngrams_windows_1251,
}
}
var charMap_KOI8_R = [256]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
}
var ngrams_KOI8_R = [64]uint32{
0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1,
0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE,
0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1,
0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF,
}
func newRecognizer_KOI8_R() *recognizerSingleByte {
return &recognizerSingleByte{
charset: "KOI8-R",
language: "ru",
charMap: &charMap_KOI8_R,
ngram: &ngrams_KOI8_R,
}
}
var charMap_IBM424_he = [256]byte{
/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 4- */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 5- */ 0x40, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 7- */ 0x40, 0x71, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x40,
/* 8- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 9- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* B- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
}
var ngrams_IBM424_he_rtl = [64]uint32{
0x404146, 0x404148, 0x404151, 0x404171, 0x404251, 0x404256, 0x404541, 0x404546, 0x404551, 0x404556, 0x404562, 0x404569, 0x404571, 0x405441, 0x405445, 0x405641,
0x406254, 0x406954, 0x417140, 0x454041, 0x454042, 0x454045, 0x454054, 0x454056, 0x454069, 0x454641, 0x464140, 0x465540, 0x465740, 0x466840, 0x467140, 0x514045,
0x514540, 0x514671, 0x515155, 0x515540, 0x515740, 0x516840, 0x517140, 0x544041, 0x544045, 0x544140, 0x544540, 0x554041, 0x554042, 0x554045, 0x554054, 0x554056,
0x554069, 0x564540, 0x574045, 0x584540, 0x585140, 0x585155, 0x625440, 0x684045, 0x685155, 0x695440, 0x714041, 0x714042, 0x714045, 0x714054, 0x714056, 0x714069,
}
var ngrams_IBM424_he_ltr = [64]uint32{
0x404146, 0x404154, 0x404551, 0x404554, 0x404556, 0x404558, 0x405158, 0x405462, 0x405469, 0x405546, 0x405551, 0x405746, 0x405751, 0x406846, 0x406851, 0x407141,
0x407146, 0x407151, 0x414045, 0x414054, 0x414055, 0x414071, 0x414540, 0x414645, 0x415440, 0x415640, 0x424045, 0x424055, 0x424071, 0x454045, 0x454051, 0x454054,
0x454055, 0x454057, 0x454068, 0x454071, 0x455440, 0x464140, 0x464540, 0x484140, 0x514140, 0x514240, 0x514540, 0x544045, 0x544055, 0x544071, 0x546240, 0x546940,
0x555151, 0x555158, 0x555168, 0x564045, 0x564055, 0x564071, 0x564240, 0x564540, 0x624540, 0x694045, 0x694055, 0x694071, 0x694540, 0x714140, 0x714540, 0x714651,
}
func newRecognizer_IBM424_he(charset string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: charset,
language: "he",
charMap: &charMap_IBM424_he,
ngram: ngram,
}
}
func newRecognizer_IBM424_he_rtl() *recognizerSingleByte {
return newRecognizer_IBM424_he("IBM424_rtl", &ngrams_IBM424_he_rtl)
}
func newRecognizer_IBM424_he_ltr() *recognizerSingleByte {
return newRecognizer_IBM424_he("IBM424_ltr", &ngrams_IBM424_he_ltr)
}
var charMap_IBM420_ar = [256]byte{
/* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */
/* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 4- */ 0x40, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 5- */ 0x40, 0x51, 0x52, 0x40, 0x40, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 7- */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
/* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
/* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
/* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
/* B- */ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0x40, 0x40, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
/* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0xCB, 0x40, 0xCD, 0x40, 0xCF,
/* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
/* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xEA, 0xEB, 0x40, 0xED, 0xEE, 0xEF,
/* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xFB, 0xFC, 0xFD, 0xFE, 0x40,
}
var ngrams_IBM420_ar_rtl = [64]uint32{
0x4056B1, 0x4056BD, 0x405856, 0x409AB1, 0x40ABDC, 0x40B1B1, 0x40BBBD, 0x40CF56, 0x564056, 0x564640, 0x566340, 0x567540, 0x56B140, 0x56B149, 0x56B156, 0x56B158,
0x56B163, 0x56B167, 0x56B169, 0x56B173, 0x56B178, 0x56B19A, 0x56B1AD, 0x56B1BB, 0x56B1CF, 0x56B1DC, 0x56BB40, 0x56BD40, 0x56BD63, 0x584056, 0x624056, 0x6240AB,
0x6240B1, 0x6240BB, 0x6240CF, 0x634056, 0x734056, 0x736240, 0x754056, 0x756240, 0x784056, 0x9A4056, 0x9AB1DA, 0xABDC40, 0xB14056, 0xB16240, 0xB1DA40, 0xB1DC40,
0xBB4056, 0xBB5640, 0xBB6240, 0xBBBD40, 0xBD4056, 0xBF4056, 0xBF5640, 0xCF56B1, 0xCFBD40, 0xDA4056, 0xDC4056, 0xDC40BB, 0xDC40CF, 0xDC6240, 0xDC7540, 0xDCBD40,
}
var ngrams_IBM420_ar_ltr = [64]uint32{
0x404656, 0x4056BB, 0x4056BF, 0x406273, 0x406275, 0x4062B1, 0x4062BB, 0x4062DC, 0x406356, 0x407556, 0x4075DC, 0x40B156, 0x40BB56, 0x40BD56, 0x40BDBB, 0x40BDCF,
0x40BDDC, 0x40DAB1, 0x40DCAB, 0x40DCB1, 0x49B156, 0x564056, 0x564058, 0x564062, 0x564063, 0x564073, 0x564075, 0x564078, 0x56409A, 0x5640B1, 0x5640BB, 0x5640BD,
0x5640BF, 0x5640DA, 0x5640DC, 0x565840, 0x56B156, 0x56CF40, 0x58B156, 0x63B156, 0x63BD56, 0x67B156, 0x69B156, 0x73B156, 0x78B156, 0x9AB156, 0xAB4062, 0xADB156,
0xB14062, 0xB15640, 0xB156CF, 0xB19A40, 0xB1B140, 0xBB4062, 0xBB40DC, 0xBBB156, 0xBD5640, 0xBDBB40, 0xCF4062, 0xCF40DC, 0xCFB156, 0xDAB19A, 0xDCAB40, 0xDCB156,
}
func newRecognizer_IBM420_ar(charset string, ngram *[64]uint32) *recognizerSingleByte {
return &recognizerSingleByte{
charset: charset,
language: "ar",
charMap: &charMap_IBM420_ar,
ngram: ngram,
}
}
func newRecognizer_IBM420_ar_rtl() *recognizerSingleByte {
return newRecognizer_IBM420_ar("IBM420_rtl", &ngrams_IBM420_ar_rtl)
}
func newRecognizer_IBM420_ar_ltr() *recognizerSingleByte {
return newRecognizer_IBM420_ar("IBM420_ltr", &ngrams_IBM420_ar_ltr)
}
================================================
FILE: testdata/8859_1_da.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
<head>
<meta name="language" content="da"/>
<meta name="dc.language" content="da"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="system" /><!--<link rel="stylesheet" type="text/css" href="/modules/virk/css/print.css" media="print" />-->
<!--[if lte IE 8]>
<link rel="stylesheet" href="/modules/virk/css/virk-ie8.css" media="screen" type="text/css"/>
<script type="text/javascript" src="/modules/assets/javascript/jquery.min.js"></script>
<script type="text/javascript" src="/modules/virk/javascript/placeholder.js"></script>
<![endif]-->
<!--[if lt IE 8]>
<link rel="stylesheet" href="/modules/virk/css/virk-ie7.css" media="screen" type="text/css"/>
<![endif]-->
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/files/live/sites/virk/files/favicon.ico" />
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(
['_setAccount', 'UA-4218600-3'],
['_setDomainName', document.location.hostname.replace('www.', '')],
['_setAllowLinker', true],
['_trackPageview']
);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<script src="https://s3-eu-west-1.amazonaws.com/cdn.iihnordic.com/virk/sb.min.js" type="text/javascript"></script>
<!-- Google Analytics -->
<title>Forside - Virk.dk</title>
<link rel="stylesheet" href="/modules/virk/css/960.css" media="print" type="text/css"></link>
<link rel="stylesheet" href="/modules/virk/css/reset.css" media="print" type="text/css"></link>
<link rel="stylesheet" href="/modules/virk/css/virk.css" media="print" type="text/css"></link>
<link rel="stylesheet" href="/modules/virk/css/print.css" media="print" type="text/css"></link>
<script type="text/javascript">
var contextJsParameters={contextPath:"",lang:"da",uilang:"da",siteUuid:"d1c6c819-a8da-419e-904d-761ee330d8d5",wcag:true}
</script>
<link id="staticAssetCSS0" rel="stylesheet" href="/modules/virk/css/blitzer/jquery-ui-1.8.16.custom.css" media="screen" type="text/css"/>
<link id="staticAssetCSS1" rel="stylesheet" href="/modules/virk/css/960.css" media="screen" type="text/css"/>
<link id="staticAssetCSS2" rel="stylesheet" href="/modules/virk/css/reset.css" media="screen" type="text/css"/>
<link id="staticAssetCSS3" rel="stylesheet" href="/modules/virk/css/virk.css" media="screen" type="text/css"/>
<link id="staticAssetCSS4" rel="stylesheet" href="/modules/virk/css/agile_carousel.css" media="screen" type="text/css"/>
<link id="staticAssetCSS5" rel="stylesheet" href="/modules/virk/css/override.css" media="screen" type="text/css"/>
<script id="staticAssetJavascript0" type="text/javascript" src="/modules/virk/javascript/jquery.min.js"></script>
<script id="staticAssetJavascript1" type="text/javascript" src="/modules/virk/javascript/jquery-ui.min.js"></script>
<script id="staticAssetJavascript2" type="text/javascript" src="/modules/virk/javascript/jquery.cookie.js"></script>
<script id="staticAssetJavascript3" type="text/javascript" src="/modules/virk/javascript/agile_carousel.alpha.js"></script>
<script id="staticAssetJavascript4" type="text/javascript" src="/modules/virk/javascript/mobile_redirection.js"></script>
<script id="staticAssetJavascript5" type="text/javascript" src="/modules/virk/javascript/virk.js"></script>
<script id="staticAssetJavascript6" type="text/javascript" src="/modules/virk/javascript/jquery.browser.js"></script>
<script id="staticAssetJavascript7" type="text/javascript" src="/modules/virk/javascript/pdf_detection.js"></script>
<script id="staticAssetJavascript8" type="text/javascript" src="/modules/virk/javascript/deployJava.js"></script>
</head>
<body >
<div id="canvashead"></div>
<img src="/modules/virk/css/img/v-print.png" id="printlogo" style="display:none"/>
<div class="bodywrapper">
<div id="maingrid"><div class="container_16">
<!--start grid_12-->
<div class='grid_12'>
<div id="headgrid"><div class="container_16">
<!--start grid_12-->
<div class='grid_12 alpha omega'>
<a href="/cms/render/live/da/sites/virk/home.html" target="_top"><img src="/files/live/sites/virk/files/v.png" alt="Til forsiden" /></a><div class="clear"></div><script type="text/javascript">$(function() {$("#navside ul.level_1 li .box-inner").hide(); $("#navside ul.level_1 li.inPath > .box-inner").show()});</script><div class="clear"></div><div class="menu">
<div id="navmenu">
<div class="navbar">
<ul class="navmenu level_1">
<li class="noChildren selected firstInLevel">
<a href="/cms/render/live/da/sites/virk/home.html" >Forside</a></li>
<li class="noChildren">
<a href="/cms/render/live/da/sites/virk/home/indberetninger.html">Indberetninger</a></li>
<li class="noChildren">
<a href="/cms/render/live/da/sites/virk/home/myndigheder.html"title="Myndigheder i hele danmark">Myndigheder</a></li>
<li class="noChildren">
<a href="/cms/render/live/da/sites/virk/home/vejledninger.html">Vejledninger</a></li>
<li class="noChildren">
<a href="/cms/render/live/da/sites/virk/home/om-virkdk.html">Om Virk.dk</a></li>
</ul>
</div>
</div>
</div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_12-->
<div class='clear'></div>
</div>
</div><div id="searchgrid"><div class="container_16">
<!--start grid_12-->
<div class='grid_12 alpha omega'>
<div class="searchbar_">
<form action="/cms/render/live/da/sites/virk/soeg.html" accept-charset="utf-8" onsubmit="return ($(this).find('.q').val() != '') || (!$(this).find('.all').attr('checked'))">
<div id="canvassearch"></div>
<fieldset>
<label class="hideMe" for="searchbar_input">Sg p Virk.dk...</label>
<input id="searchbar_input" value="" type="text" class="q auto" name="x"
placeholder="Sg p Virk.dk..."
onfocus="$(this.form).addClass('large');" />
<input class="sb" type="submit" title="Sg" value="Sg" /><br/>
<div class="qe" style="display:none">
<legend class="hideMe">Kategorier</legend>
<input id="radio_alt" class="all" type="radio" name="t" value="" checked="checked"/><label for="radio_alt">Alt</label>
<input id="radio_indberetninger" type="radio" name="t" value="indberetning" /><label for="radio_indberetninger">Kun indberetninger</label>
<input id="radio_cvr" type="radio" name="t" value="CVR" /><label for="radio_cvr">Kun CVR-oplysninger</label>
<!--<button class="close" onclick="$(this.form).removeClass('large'); return false">X</button>-->
</legend>
</div>
</fieldset>
</form>
</div><div class="clear"></div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_12-->
<div class='clear'></div>
</div>
</div><br/><script type="text/javascript">$(function() {$("#navmenu li a:contains('Forside')").parent().addClass("inPath")})</script><div class="container_16">
<!--start grid_12-->
<div class='grid_12 alpha'>
<map name="map_efb953fe-6311-4503-b508-9a3c9976a9cf" id="map_efb953fe-6311-4503-b508-9a3c9976a9cf">
<area shape="rect" coords="0,0,700,142" href="/cms/render/live/da/sites/virk/home/vejledninger/ansaetselv.html" alt="AnstSelv" /></map>
<map name="map_d89e990a-6a8d-4cdd-acb2-f19698224551" id="map_d89e990a-6a8d-4cdd-acb2-f19698224551">
<area shape="rect" coords="0,0,700,142" href="/cms/render/live/da/sites/virk/home/vejledninger/start-virksomhed/vejviser.html" alt="vejviser" /></map>
<map name="map_a1be4c78-0106-4af1-82df-a02f153dff58" id="map_a1be4c78-0106-4af1-82df-a02f153dff58">
<area shape="rect" coords="0,0,700,142" href="/cms/render/live/da/sites/virk/home/indberetninger.html" alt="indberetninger" /></map>
<script type="text/javascript">
var data_forsideroulette = [
{"content": "<div class='slide_inner'><img usemap='#map_efb953fe-6311-4503-b508-9a3c9976a9cf' src='/files/live/sites/virk/files/Billeder/karrussel-online_offline-foto/Karrusellen-online/Ansaetselv.gif' alt=''/></div>" },
{"content": "<div class='slide_inner'><img usemap='#map_d54910e5-f382-4537-90f1-26d129e17722' src='/files/live/sites/virk/files/Billeder/karrussel-online_offline-foto/Karrusellen-online/Blondine_CVR.jpg' alt=''/></div>" },
{"content": "<div class='slide_inner'><img usemap='#map_d89e990a-6a8d-4cdd-acb2-f19698224551' src='/files/live/sites/virk/files/Billeder/karrussel-online_offline-foto/Karrusellen-online/Kompas.jpg' alt=''/></div>" },
{"content": "<div class='slide_inner'><img usemap='#map_a1be4c78-0106-4af1-82df-a02f153dff58' src='/files/live/sites/virk/files/Billeder/karrussel-online_offline-foto/Karrusellen-online/Ny-paa-Virk.jpg' alt=''/></div>" }
];
$(function() {
$("#carousel-forsideroulette").agile_carousel({
carousel_data: data_forsideroulette,
carousel_outer_height: 142,
carousel_height: 142,
slide_height: 142,
carousel_outer_width: 700,
slide_width: 700,
transition_time: 300,
timer: 4000,
continuous_scrolling: true,
transition_type: "slide",
control_set_1: "numbered_buttons",
no_control_set: "hover_previous_button,hover_next_button"
});
});
</script>
<div class="carousel flavor_1" id="carousel-forsideroulette">
</div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_12-->
<div class='clear'></div>
</div><p>
</p><div id="Virk-forside-top"><div class="container_16">
<!--start grid_4-->
<div class='grid_4 alpha'>
<div class="titlebox underlined">
<h3 class="underlined">
<span>Mest anvendte</span>
</h3>
<div class="box-content" style="min-height:200px">
<p style="text-align: justify;">
<a href="http://www.virk.dk/id/7509" target="_self" title="Fakturablanketten"><br />
Fakturablanketten</a><br />
<a href="http://www.virk.dk/id/25198" title="NemRefusion">NemRefusion</a><a href="http://www.virk.dk/id/30068" title="Registrer enkeltmandsvirksomhed"><br />
Registrer enkeltmandsvirksomhed</a><br />
<a href="http://www.virk.dk/id/7660" title="Webreg - ndre/lukke">Ændre/lukke virksomhed</a><a href="http://www.virk.dk/id/7520" title="TastSelv Erhverv"><br />
TastSelv Erhverv</a><br />
<a href="/cms/render/live/da/sites/virk/home/indberetninger.html" title="Alle indberetninger"><br />
Alle indberetninger</a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class='clear'></div>
</div>
<!--stop grid_4-->
<!--start grid_4-->
<div class='grid_4'>
<div class="titlebox underlined">
<h3 class="underlined">
<span>Hvis du skal...</span>
</h3>
<div class="box-content" style="min-height:200px">
<p>
<a href="/cms/render/live/da/sites/virk/home/vejledninger/administration-af-medarbejdere.html" title="Anstte en medarbejder"><br />
</a><a href="/cms/render/live/da/sites/virk/home/vejledninger/start-virksomhed/vejviser.html" title="Starte en virksomhed">Registrere eller ændre en virksomhed</a><br />
<a href="/cms/render/live/da/sites/virk/home/vejledninger/indberetning-af-statistik.html" title="Indberette statistik">Indberette statistik</a><br />
<a href="/cms/render/live/da/sites/virk/home/vejledninger/start-fdevarevirksomhed.html" title="Starte fdevarevirksomhed">Starte fødevarevirksomhed</a><br />
<a href="/cms/render/live/da/sites/virk/home/vejledninger/registrering-som-arbejdsgiver.html" title="Vre arbejdsgiver">Være arbejdsgiver</a></p>
<p>
<br />
<a href="/cms/render/live/da/sites/virk/home/vejledninger.html" title="Se alle guides og vejledninger">Se alle guides og vejledninger</a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class='clear'></div>
</div>
<!--stop grid_4-->
<!--start grid_4-->
<div class='grid_4 omega'>
<div class="titlebox underlined">
<h3 class="underlined">
<span>Indberetninger efter emne</span>
</h3>
<div class="box-content" style="min-height:200px">
<p style="text-align: center;">
<a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Byggeri+og+Ejendom%2F%22" name="Byggeri og Ejendom" title="Byggeri og Ejendom">Byggeri og Ejendom</a> <span style="font-size: 18px;"><a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Energi+og+Milj%C3%B8%2F%22" name="Energi og Milj" title="Energi og Milj">Energi og Miljø</a></span> <span style="font-size: 10px;"><a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Erhverv+og+Industri%2F%22" name="Erhverv og Industri" title="Erhverv og Industri">Erhverv og Industri</a></span> <a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Landbrug%2C+Skovbrug+%26+Fiskeri%2F%22" name="Landbrug, Skovbrug og Fiskeri" title="Landbrug, Skovbrug og Fiskeri"><span style="font-size: 12px;">Landbrug, Skovbrug og Fiskeri</span></a> <a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Personale+og+Uddannelse%2F%22" name="Personale og Uddannelse" title="Personale og Uddannelse"><span style="font-size: 16px;">Personale og Uddannelse</span></a> <span style="font-size: 10px;"><a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Sikkerhed+og+Sundhed%2F%22" name="Sikkerhed og Sundhed" title="Sikkerhed og Sundhed">Sikkerhed og Sundhed</a></span> <a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Transport%2F%22" name="Transport" title="Transport"><span style="font-size: 16px;"><span style="font-size: 18px;">Transport </span> </span></a><span style="font-size: 16px;"><a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22Virksomhedsforhold%2F%22" name="Virksomhedsforhold " title="Virksomhedsforhold ">Virksomhedsforhold </a></span> <a href="http://www.virk.dk/cms/render/live/da/sites/virk/home/indberetninger.html?c=%22%C3%98konomi%2F%22" name="konomi" title="konomi">Økonomi</a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class='clear'></div>
</div>
<!--stop grid_4-->
<div class='clear'></div>
</div>
</div><div id="virk-forside-bund"><div class="container_16">
<!--start grid_4-->
<div class='grid_4 alpha'>
<div class="box spot-white-blue" style="min-height:200px">
<div class="box-content">
<h1>
Cookies</h1>
<p>
På Virk.dk bruger vi cookies bl.a. til at forbedre vores indhold og struktur via din og andres faktiske brug af Virk.dk.</p>
<p>
<a href="/cms/render/live/da/sites/virk/home/om-virkdk/vilkar-for-brug-af-virkdk/brug-af-cookies.html" title="brug af cookies">Læs mere om cookies og brugen af dem her</a><br />
</p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class='clear'></div>
</div>
<!--stop grid_4-->
<!--start grid_8-->
<div class='grid_8 omega'>
<div class="box spot-white-orange" style="min-height:200px">
<div class="box-content">
<h1>
Vejledninger på Virk.dk</h1>
<p>
Vidste du, at du på Virk.dk kan finde vejledninger og guides, der fører dig igennem dine forpligtelser over for det offentlige i forskellige situationer? Du kan via e-læringsfilm fx lære om, hvilke pligter du skal registrere ift. SKAT og ATP, få hjælp til hvordan du bruger NemRefusion og Regnskab 2.0 eller få svar på hvad Næringsbasen er.</p>
<p>
<a href="/cms/render/live/da/sites/virk/home/vejledninger.html" title="Se alle vejledninger p Virk.dk">Se alle vejledninger på Virk.dk</a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class='clear'></div>
</div>
<!--stop grid_8-->
<div class='clear'></div>
</div>
</div><div class="clear"></div><div class="clear"></div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_12-->
<!--start grid_4-->
<div class='grid_4'>
<div class="menu">
<div id="navsub">
<div class="navbar">
<ul class="navmenu level_1">
<li class="noChildren">
<a href="/cms/render/live/da/sites/virk/home/hjaelp.html">Hjlp</a></li>
<li class="noChildren">
<a href="http://www.virk.dk/cms/render/live/en/sites/english/home.html" >English</a></li>
</ul>
</div>
</div>
</div><div class="clear"></div><script type="text/javascript">
function displayChangeLegalUnit() {
$("#changeLegalUnitDiv").slideToggle(300);
return false;
}
function setBehalfOfCookie(value) {
$.cookie('virk_behalfof', value, { expires: 1, path: '/'});
}
var legalunitmap = new Object();
$(function() {
var cvrnumberidentifier = '';
var cvrbehalfof = $.cookie('virk_behalfof');
if (cvrbehalfof==null || cvrnumberidentifier==cvrbehalfof) {
$('#behalfofcontainer').hide();
$('#standardcontainer').show();
setBehalfOfCookie(null);
} else {
$('#behalfofcontainer').show();
$('#standardcontainer').hide();
$('#behalfofname').html(legalunitmap[cvrbehalfof]);
$('#behalfofcvr').append(cvrbehalfof);
$('#cvrSelector option').each(function () {
if ($(this).val()==cvrbehalfof) {
$(this).attr('selected','selected');
}
});
}
});
</script>
<div class="virklogin normal">
<div class="box crown-small" style="min-height:0px;">
<div class="box-content">
<p>Du kan logge ind med Digital signatur eller NemID</p>
<form action="/saml/virk/login" accept-charset="utf-8">
<input type="hidden" name="f" id="f" value="/cms/render/live/da/sites/virk/home.html" />
<input class="lb" type="submit" value="Log ind" />
<script type="text/javascript">
$(function() {
$("#f").val(window.location.pathname);
});
</script>
</form>
</div>
</div>
</div><div class="container_16">
<!--start grid_4-->
<div class='grid_4 alpha'>
<div class='clear'></div>
</div>
<!--stop grid_4-->
<div class='clear'></div>
</div><div class="postbokscontainer boxstyle2 titlebox">
<div class="img">
<h3>
Post
<img src="/modules/virk/css/img/i_mail.png" alt="internal-link-on-image" />
</h3>
</div>
<div class="link">
<a href="/cms/render/live/da/sites/virk/system/post.html" target="_self">Modtag posten digitalt og sikkert</a><br />
</div>
</div><div class="clear"></div><div class="box spot-blue-blue" style="min-height:0px">
<div class="box-content">
<h2>
Digital signatur</h2>
<p>
<a href="https://www.nets-danid.dk/produkter/nemid_medarbejdersignatur/bestil_nemid/index.html?execution=e1s1" target="_blank" title="Bestil NemID medarbejdersignatur">Bestil NemID medarbejdersignatur</a></p>
<p>
<a href="/cms/render/live/da/sites/virk/home/hjaelp/digital-signatur.html" title="Virk.dk og digitale signaturer">Virk.dk og digitale signaturer </a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class="box spot-white-orange" style="min-height:0px">
<div class="box-content">
<p>
<a href="/cms/render/live/da/sites/virk/home/mobilportalen.html" target="_self" title="G til mobile indgange til det offentlige"><img alt="" src="/files/live/sites/virk/files/mobileportal/_bg-illustration.png" style="width: 150px; height: 117px;" title="Mobile indgange til det offentlige" /></a></p>
<p>
<strong><a href="/cms/render/live/da/sites/virk/home/mobilportalen.html" target="_self" title="Mobile indgange til det offentlige" type="Mobile indgange til det offentlige">Din mobile indgang til det offentlige</a></strong></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class="box spot-white-blue" style="min-height:0px">
<div class="box-content">
<p>
Viden og værktøjer<a href="http://www.startvaekst.dk/forside/0/2" target="_blank"><br />
<img alt="Startvkst" src="/files/live/sites/virk/files/Billeder/DIA/startvaekstlogo.gif" style="width: 128px; height: 31px;" title="G til Startvkst.dk" /></a></p><div class="clear"></div></div>
<div class="clear"></div>
</div><div class="clear"></div><div class="clear"></div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_4-->
<div class='clear'></div>
</div>
</div><div id="lowgrid"><div class="container_16">
<!--start grid_16-->
<div class='grid_16'>
<div class="clear"></div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_16-->
<div class='clear'></div>
</div>
</div><div id="footergrid"><div class="container_16">
<!--start grid_16-->
<div class='grid_16'>
<hr />
<p>
<strong><a href="http://www.virk.dk" title="G til forsiden af Virk.dk">Virk.dk</a> l <a href="/cms/render/live/da/sites/virk/home/om-virkdk/kontakt.html" title="Kontakt">Kontakt</a> l <a href="/cms/render/live/da/sites/virk/home/om-virkdk/vilkar-for-brug-af-virkdk.html" title="Vilkr">Vilkår</a> l <a href="/cms/render/live/da/sites/virk/home/om-virkdk/vilkar-for-brug-af-virkdk/brug-af-cookies.html" title="Cookies">Cookies</a></strong></p><!-- (C)2000-2012 Gemius SA - gemiusAudience / virk2.dk / Main Page --><script type="text/javascript"><!--//--><![CDATA[//><!-- var pp_gemius_identifier = new String('ciJL_wNr.JgYJqX0m_g9zJcP3wmUakciFWAvGBI5K4v.w7'); //--><!]]></script> <script type="text/javascript" src="/files/live/sites/virk/files/scripts/xgemius.js"></script><div class="clear"></div><div class="clear"></div><div class='clear'></div>
</div>
<!--stop grid_16-->
<div class='clear'></div>
</div>
</div><div class="clear"></div></div>
<br style="clear: both"/>
</body>
</html>
================================================
FILE: testdata/8859_1_de.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta content='infopark.de' name='author'>
<meta content='width=device-width, minimum-scale=0.1, maximum-scale=1.0' name='viewport'>
<meta content='text/html; charset=utf-8' http-equiv='content-type'>
<!--[if IE ]> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <![endif]-->
<meta name="description" content="Homepage der Infopark AG: Infopark powers great websites. Portal-Lsungen und webbasierte Informationssysteme. Beratung rund ums Web. Infopark Cloud Express: Content Management System, WebCRM und Elastic Web Platform">
<meta name="keywords" content="Infopark Cloud Express, Infopark CMS Fiona, Content Management System, Great websites on-demand, Online-Marketing, Portal-Lsungen, PaaS, Ruby on Rails, CMS, CRM">
<title>
infopark.de Startseite | Anbieter von: Infopark Cloud Express | CMS und CRM on-demand. | Infopark powers great websites.
</title>
<link href="/assets/application-f50f7301c9902c83a261c6d56e407c4c.css" media="all" rel="stylesheet" type="text/css" />
<script src="/assets/application-df3f0bcee61689dca239d5cd789f6ec0.js" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="9CTUMV/JLeAs40RrBZc5k0qca07tGu5PWrx7EFCru7M=" name="csrf-token" />
<meta content="Rails Connector for Infopark CMS Fiona by Infopark AG (www.infopark.de); Version 6.8.0.beta.200.663.ceecdee" name="generator" />
<script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script></head>
<!--[if lt IE 7]> <body class="ie6"> <![endif]-->
<!--[if IE 7]> <body class="ie7"> <![endif]-->
<!--[if IE 8]> <body class="ie8"> <![endif]-->
<!--[if IE 9]> <body class="ie9"> <![endif]-->
<body>
<div id='container'>
<img alt="infopark Logo" id="print_logo" src="/assets/infopark-logo-9eb6d5963f5db3f5e22ff14bb117a875.png" />
<div class='error_ie6'>
<img alt="infopark Logo" src="/assets/infopark-logo-9eb6d5963f5db3f5e22ff14bb117a875.png" />
<h2>Wir untersttzen diesen Browser nicht mehr.</h2>
<p>
Sie mchten die Webseiten der Infopark AG mit dem Internet Explorer 6 besuchen.
<br>
Wir untersttzen diesen Browser nicht mehr. Bitte machen Sie einen Browser-Update.
</p>
<p>
Vielen Dank - Ihr Infopark-Team
</p>
</div>
<nav>
<ul>
<li class='home'>
<a href="/de" class="" title="home"><img alt="Red_ip_logo" src="/assets/red_ip_logo-8c45f52089359251256b9511c4d6c25f.png" /></a>
</li>
<li class='first' id='top-navi-web-technologien'>
<a href="/web-technologien" class="icon icon-web_technologien">Web-Technologien</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav web_technologien'>
<img alt="bild user role" src="/assets/teaser_img/web_technologien_nav-9c38a8b7ce70f2a76094a8a4b49dae8a.jpg" />
<div>
<a href="/system-architektur">System-Architektur</a>
<a href="/entwicklung-bei-infopark">Entwicklung bei Infopark</a>
<a href="/innovative-technologien">Innovative Technologien</a>
<a href="/datenschutz-datensicherheit">Datenschutz und -sicherheit</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
<li id='top-navi-online-marketing'>
<a href="/online-marketing" class="icon icon-online_marketing">Online-Marketing</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav online_marketing'>
<img alt="bild user role" src="/assets/teaser_img/online_marketing_nav-307c6294cb9b4766ca293ece254c8ef0.jpg" />
<div>
<a href="/leitmedium-internet">Leitmedium Internet</a>
<a href="/top-trends-im-web">Top-Trends im Web</a>
<a href="/web-strategie">Web-Strategie und Konzepte</a>
<a href="/mit-online-marketing-zum-ziel">Mit Online-Marketing zum Ziel</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
<li id='top-navi-loesungen'>
<a href="/loesungen" class="icon icon-loesungen">Lsungen</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav loesungen'>
<img alt="bild user role" src="/assets/teaser_img/loesungen_nav-8c26767af3304f12aec71c857a5cc929.jpg" />
<div>
<a href="/infopark-cloud-express">Infopark Cloud Express</a>
<a href="/cms">Content Management System</a>
<a href="/webcrm">WebCRM</a>
<a href="/elastic-web-platform">Elastic Web Platform</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
<li id='top-navi-partner'>
<a href="/partner" class="icon icon-partner">Partner</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav partner'>
<img alt="bild user role" src="/assets/teaser_img/partner_nav-d45fdaafe3310b1f3cdeb4e9a5439d83.jpg" />
<div>
<a href="/partner-werden">Infopark-Partner werden</a>
<a href="/partner-trainings">Partner-Trainings</a>
<a href="/agentur-finden">Agentur finden</a>
<a href="/technologie-partner">Technologie-Partner</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
<li id='top-navi-bewerber-jobs'>
<a href="/jobs" class="icon icon-bewerber">Bewerber</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav bewerber'>
<img alt="bild user role" src="/assets/teaser_img/bewerber_nav-a067b8de1c2c95d2569a53b8e1ca9302.jpg" />
<div>
<a href="/2863/absolventen-trainees-stellenangebote">Absolventen & Trainees</a>
<a href="/2871/studenten-praktikanten-stellenangebote">Studenten & Praktikanten</a>
<a href="/2859/ausbildung-systemkaufmann-mediengestalter-stellenangebot">Auszubildende</a>
<a href="/2867/professionals-entwickler-vertrieb-infopark-stellenangebote">Professionals</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
<li id='top-navi-presse'>
<a href="/presse" class="icon icon-presse">Presse</a>
<div class='nav-hovermenu grid_8'>
<div class='fourbox_nav presse'>
<img alt="bild user role" src="/assets/teaser_img/presse_nav-1528cd66b36e939254c38ca46b95df62.jpg" />
<div>
<a href="/news">Social Media Newsroom</a>
<a href="/59013/infopark-in-den-medien">Infopark in den Medien</a>
<a href="/99726/pressemitteilungen_2012">Pressemitteilungen</a>
<a href="/bildmaterial">Bildmaterial</a>
</div>
<div class='sec'>
<a href="/events">Veranstaltungen</a>
<a href="/references">Referenzen</a>
<a href="/company">Unternehmen</a>
</div>
</div>
</div>
</li>
</ul>
<div id='logo'>
<a href="/de" title="infopark.de Home"><img alt="infopark Logo" src="/assets/infopark-logo-transparent-7a7d3ad4de7e1b59ffe3d04c01650f33.png" /></a>
</div>
</nav>
<form accept-charset="UTF-8" action="/search" id="search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
<input id="search-box" name="q" tabindex="1" type="text" />
<input id="id" name="id" type="hidden" value="2235" />
<button id='search-button'></button>
</form>
<header class='grid_8' id='homepage'>
<div id='teaser'>
<a href='#'>
<img alt="teaser" border="0" src="/assets/teaser_img/online_marketing_startseite-d538fae0fa4714d455ca6293312980e9.jpg" />
<span>
<img alt="teaser" border="0" src="/assets/teaser_img/online_marketing_startseite_text-ef8421aad49c89b749383cf4e58a5aee.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/teaser_img/online_marketing_startseite_text-ef8421aad49c89b749383cf4e58a5aee.png', sizingMethod='scale');" />
</span>
</a>
<a href='#'>
<img alt="teaser" border="0" src="/assets/teaser_img/cio_startseite-33c4379008eee0c17f6bad76c2b6e861.jpg" />
<span>
<img alt="teaser" border="0" src="/assets/teaser_img/cio_startseite_text-b12ba982454d8ecb3192a725184568fe.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/teaser_img/cio_startseite_text-b12ba982454d8ecb3192a725184568fe.png', sizingMethod='scale');" />
</span>
</a>
<a href='#'>
<img alt="teaser" border="0" src="/assets/teaser_img/web_technologien_startseite-7e7a21dd8ae6e31f8585dfdc37da8bf9.jpg" />
<span>
<img alt="teaser" border="0" src="/assets/teaser_img/web_technologien_startseite_text-8d57d79efe1e8bbf7ff2b0502e17a30f.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/teaser_img/web_technologien_startseite_text-8d57d79efe1e8bbf7ff2b0502e17a30f.png', sizingMethod='scale');" />
</span>
</a>
<a href='#'>
<img alt="teaser" border="0" src="/assets/teaser_img/partner_startseite-555cb54ba7d1f2b3a34f2bfa9dad51e7.jpg" />
<span>
<img alt="teaser" border="0" src="/assets/teaser_img/partner_startseite_text-1b132ade92a431d0c4937777698d3408.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/teaser_img/partner_startseite_text-1b132ade92a431d0c4937777698d3408.png', sizingMethod='scale');" />
</span>
</a>
<a href='#'>
<img alt="teaser" border="0" src="/assets/teaser_img/cio_startseite-33c4379008eee0c17f6bad76c2b6e861.jpg" />
<span>
<img alt="teaser" border="0" src="/assets/teaser_img/cio_startseite_text-b12ba982454d8ecb3192a725184568fe.png" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/teaser_img/cio_startseite_text-b12ba982454d8ecb3192a725184568fe.png', sizingMethod='scale');" />
</span>
</a>
</div>
<div class='teaser_left'><img alt="Transparent" src="/assets/teaser_img/transparent-a0c4145755ab5be0c6d780f53f398778.png" /></div>
<div class='teaser_right'><img alt="Transparent_right" src="/assets/teaser_img/transparent_right-e72f285948fb7c62adf83a1d3b8e2aee.png" /></div>
<!-- = render({:state => :meta}, @obj) -->
</header>
<div id='main'>
<div class='fourbox'>
<div>
<a href="/91284/infopark-cloud-express-im-detail"><h1 class="heading-main">Cloud-Lsungen</h1></a>
<div class='content'>
<a href="http://video-cdn.infopark.de/20111124.infopark-referenzenfilm.640x360.mp4" class="video"><img alt="referenzprojekte-video" src="/112191/referenzprojekte-video.jpg" /></a>
<p>Great websites on-demand.<br> Entdecken Sie unsere Cloud-Services auf Basis von Ruby on Rails. CMS und CRM fr komplexe Web-Projekte. </p>
</div>
<div class='readmore'>
<a href="/91284/infopark-cloud-express-im-detail" class="readmore-link">Die Cloud entdecken!</a>
</div>
</div>
<div>
<a href="/awards"><h1 class="heading-main">Auszeichnungen</h1></a>
<div class='content'>
<img alt="Infoparks gewonnene Awards" src="/112180/infopark-awards.png" />
<p>Der Infopark Cloud Express wurde bereits mehrfach bei nationalen und paneuropischen Wettbewerben ausgezeichnet.</p>
</div>
<div class='readmore'>
<a href="/awards" class="readmore-link">Best in Class-Awards</a>
</div>
</div>
<div>
<a href="/111285" class="html"><h1 class="heading-main">Infopark Cloud Express</h1></a>
<div class='content'>
<a href="/111285" class="html"><img src="/112211/infopark-cloud-express.jpg" alt="infopark-cloud-express" /></a>
<p></p>
</div>
<div class='readmore'>
<a href="/111285" class="html readmore-link">Kostenlose Registrierung</a>
</div>
</div>
<div>
<a href="/news"><h1 class="heading-main">Nachrichten</h1></a>
<div class='content'>
<div style="overflow-y: scroll; overflow-x: hidden; height: 250px">
<div id="fb"></div>
</div>
<p></p>
</div>
<div class='readmore'>
<a href="/news" class="readmore-link">Zum Social Media Newsroom</a>
</div>
</div>
</div>
<div class='claim'>
<img alt="Infopark powers great websites" src="/assets/visual_arrow-3654c8b1c6400e0d202a22eafe10cc92.png" />
Infopark powers great websites.
</div>
</div>
</div>
<footer>
<div class='grid_8' id='footer-container'>
<div id='breadcrumbs'>
<ul>
<li class='first'>
<a href='/' title='Home'></a>
</li>
<li><a href="/de">infopark.de Startseite | Anbieter von: Infopark Cloud Express | CMS und CRM on-demand.</a></li>
</ul>
<div id='award_wrapper'>
<div id='award_1'>
<a href="/awards"> </a>
<span class='info_layer'>
<h3>Best in Cloud Award 2011</h3>
Winner "Platform-as-a-Service"
</span>
</div>
<div id='award_2'>
<a href="/awards"> </a>
<span class='info_layer'>
<h3>European Software Excellence Award 2012</h3>
Winner "Content-Management-Solution"
</span>
</div>
<div id='award_3'>
<a href="/awards"> </a>
<span class='info_layer'>
<h3>Innovationspreis-IT 2012</h3>
Winner "On demand"
</span>
</div>
</div>
</div>
<div class='grid_8 all'>
<ul class='footer'>
<li class='title no_link'>
<h5>
Infopark AG
</h5>
</li>
<li>
<a href="/events">Veranstaltungen</a>
</li>
<li>
<a href="/references">Referenzen</a>
</li>
<li>
<a href="/company">Unternehmen</a>
</li>
</ul>
<ul class='footer'>
<li class='title no_link'>
<h5>Fr Interessenten</h5>
</li>
<li><a href="/web-technologien">Web-Technologien</a></li>
<li><a href="/online-marketing">Online-Marketing</a></li>
<li><a href="/loesungen">Lsungen</a></li>
<li><a href="/partner">Partner</a></li>
<li><a href="/jobs">Bewerber</a></li>
<li><a href="/presse">Presse</a></li>
</ul>
<ul class='footer'>
<li class='title no_link'>
<h5>Fr Kunden</h5>
</li>
<li><a href="http://kb.infopark.de">Knowledge Base</a></li>
<li><a href="http://kb.infopark.de/support">Support-Anfragen</a></li>
</ul>
<ul class='footer'>
<li class='title no_link'>
<h5>Infopark in Social Media</h5>
</li>
<li><a href="http://www.facebook.com/infopark">Facebook</a></li>
<li><a href="http://www.twitter.com/infopark">Twitter</a></li>
<li><a href="http://www.youtube.com/infoparkag">YouTube</a></li>
<li><a href="https://www.xing.com/companies/infoparkag/about">Xing</a></li>
<li><a href="http://www.slideshare.net/infoparkag">Slideshare</a></li>
</ul>
<ul class='footer'>
<li class='title no_link'>
<h5>Rechtliches</h5>
</li>
<li><a href="/transparency-center">Transparency Center</a></li>
<li><a href="/agb">AGB</a></li>
<li><a href="/datenschutz">Datenschutz</a></li>
<li><a href="/impressum">Impressum</a></li>
<li><a href="/contact">Kontakt & Anfahrt</a></li>
</ul>
<div class='clear'></div>
</div>
<div id='footer-contact'>
<span class='contact'>
Tel.: +49 30 747993-0 | E-Mail:
<script type="text/javascript">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%5c%22%6d%61%69%6c%74%6f%3a%69%6e%66%6f%40%69%6e%66%6f%70%61%72%6b%2e%64%65%3f%73%75%62%6a%65%63%74%3d%4b%6f%6e%74%61%6b%74%61%6e%66%72%61%67%65%5c%22%3e%69%6e%66%6f%40%69%6e%66%6f%70%61%72%6b%2e%64%65%3c%5c%2f%61%3e%27%29%3b'))</script>
</span>
<div id='social_sharing'>
<div data-text='Infopark Powers Great Websites' data-url='http://www.infopark.de/' id='shareme'></div>
</div>
</div>
</div>
</footer>
<script>
//<![CDATA[
var area = "top-navi-";
//]]>
</script>
<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
NREUMQ.push(["load",new Date().getTime()]);
var e=document.createElement("script");
e.type="text/javascript";e.async=true;e.src="https://d1ros97qkrwjf5.cloudfront.net/40/eum/rum.js";
document.body.appendChild(e);
if(NREUMQ.a)NREUMQ.a();
};
NREUMQ.a=window.onload;window.onload=NREUMQ.f;
};
NREUMQ.push(["nrfj","beacon-1.newrelic.com","8b59887f9b",379282,"IAsKQxYKWVRRE04MWw4BFFYDABpRWgUEHA==",0,147,new Date().getTime(),"","","","",""])</script></body>
</html>
================================================
FILE: testdata/8859_1_en.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script>var BtechCF = {a:1,cf:function(){if(--BtechCF.a == 0){ uet('cf');}},inc:function(){BtechCF.a++;}};</script>
<!--btech-iplc-->
<script type="text/javascript">
var btiplv;
new Image().src = "http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V394051227_.png";
new Image().src = "http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif";
</script>
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="http://g-ecx.images-amazon.com">
<link rel="dns-prefetch" href="http://z-ecx.images-amazon.com">
<link rel="dns-prefetch" href="http://ecx.images-amazon.com">
<link rel="dns-prefetch" href="http://completion.amazon.com">
<link rel="dns-prefetch" href="http://client-log.amazon.com">
<!-- ue -->
<style type="text/css"><!--
BODY { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; background-color: #FFFFFF; color: #000000; margin-top: 0px; }
TD, TH { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; }
.serif { font-family: times,serif; font-size: 16px; }
.sans { font-family: arial,verdana,helvetica,sans-serif; font-size: 16px; }
.small { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; }
.h1 { font-family: arial,verdana,helvetica,sans-serif; color: #E47911; font-size: 16px; }
.h3color { font-family: arial,verdana,helvetica,sans-serif; color: #E47911; font-size: 13px; }
h2.small {margin-bottom: 0em; }
h2.h1 { margin-bottom: 0em; }
h2.h3color { margin-bottom: 0em; }
.tiny { font-family: arial,verdana,helvetica,sans-serif; font-size: 11px; }
.tinyprice { font-family: arial,verdana,helvetica,sans-serif; color: #990000; font-size: 11px; }
.highlight { font-family: arial,verdana,helvetica,sans-serif; color: #990000; font-size: 13px; }
.popover-tiny { font-size: 11px; font-family: arial,verdana,helvetica,sans-serif; }
.horizontal-search { font-weight: bold; font-size: 13px; color: #FFFFFF; font-family: arial,verdana,helvetica,sans-serif; }
.listprice { font-family: arial,verdana,helvetica,sans-serif; text-decoration: line-through; }
.price { font-family: arial,verdana,helvetica,sans-serif; color: #990000; }
.horizontal-websearch { font-size: 11px; font-family: arial,verdana,helvetica,sans-serif; padding-left: 12px; }
.big { font-size: 18px; font-family: arial,verdana,helvetica,sans-serif; }
.amabot_widget .headline { color: #E47911; font-size: 16px; display: block; font-weight: bold; }
div.unified_widget .headline { color: #E47911; font-size: 16px; display: block; font-weight: bold; }
div#page-wrap { min-width: 980px; }
* html div#page-wrap { border-right: 980px solid #fff; width: 100%; margin-right: 25px;}
* html div#content { float: left; position:relative; margin-right: -980px; }
div#leftcol, div#leftcolhidden { float: left; width: 180px; margin:5px 0px 0px 5px; display: inline; }
div#rightcol, div#rightcolhidden { float: right; width: 300px; margin-top:15px;}
div#leftcolhidden { clear:left;}
div#rightcolhidden { clear:right; }
div#center1, div#centercol, div#centerrightspancol { overflow: hidden; }
* html div#center1 { width: auto; }
* html div#centercol { width: auto; }
* html div#centerrightspancol { width: 100%; }
div#page-footer { clear: both; }
a:link { font-family: arial,verdana,helvetica,sans-serif; color: #004B91; }
a:visited { font-family: arial,verdana,helvetica,sans-serif; color: #996633; }
a:active { font-family: arial,verdana,helvetica,sans-serif; color: #FF9933; }
a.noclick, a.noclick:visited { color: #000000; }
.noLinkDecoration a { text-decoration: none; border-bottom: none; }
.noLinkDecoration a:hover { text-decoration: underline; }
.noLinkDecoration a.dynamic:hover { text-decoration: none; border-bottom: 1px dashed; }
.noLinkDecoration a.noclick:hover { color: #000000; text-decoration: none; border-bottom: 1px dashed; }
.attention { background-color: #FFFFD5; }
.alertgreen { color: #009900; font-weight: bold; }
.alert { color: #FF0000; font-weight: bold; }
.topnav { font-family: arial,verdana,helvetica,sans-serif; font-size: 12px; text-decoration: none; }
.topnav a:link, .topnav a:visited { text-decoration: none; color: #003399; }
.topnav a:hover { text-decoration: none; color: #E47911; }
.topnav-active a:link, .topnav-active a:visited { font-family: arial,verdana,helvetica,sans-serif; font-size: 12px; color: #E47911; text-decoration: none; }
.eyebrow { font-family: arial,verdana,helvetica,sans-serif; font-size: 10px; font-weight: bold;text-transform: uppercase; text-decoration: none; color: #FFFFFF; }
.eyebrow a:link { text-decoration: none; }
.popover-tiny a, .popover-tiny a:visited { text-decoration: none; color: #003399; }
.popover-tiny a:hover { text-decoration: none; color: #E47911; }
.tabon a:hover, .taboff a:hover { text-decoration: underline; }
.tabon div, .taboff div { margin-top: 7px; margin-left: 9px; margin-bottom: 5px; }
.tabon a, .tabon a:visited { font-size: 10px; color: #FFCC66; font-family: arial,verdana,helvetica,sans-serif; text-decoration: none; text-transform: uppercase; font-weight: bold; line-height: 10px; }
.taboff a, .taboff a:visited { font-size: 10px; color: #000000; font-family: arial,verdana,helvetica,sans-serif; text-decoration: none; text-transform: uppercase; font-weight: bold; line-height: 10px; }
.indent { margin-left: 1em; }
.half { font-size: .5em; }
.list div { margin-bottom: 0.25em; text-decoration: none; }
.hr-center { margin: 15px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dotted; border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999; }
.amabot_right .h1 { color: #E47911; font-size: .92em; }
.amabot_right .amabot_widget .headline, .amabot_left .amabot_widget .headline { color: #E47911; font-size: .92em; display: block; font-weight: bold; }
.amabot_left .h1 { color: #E47911; font-size: .92em; }
.amabot_left .amabot_widget, .amabot_right .amabot_widget, .tigerbox { padding-top: 8px; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; border-bottom: 1px solid #C9E1F4; border-left: 1px solid #C9E1F4; border-right: 1px solid #C9E1F4; border-top: 1px solid #C9E1F4; }
.amabot_center div.unified_widget, .amabot_center .amabot_widget { font-size: 12px; }
.amabot_right div.unified_widget, .amabot_right .amabot_widget { font-size: 12px; }
.amabot_left div.unified_widget, .amabot_left .amabot_widget { font-size: 12px; }
.rightArrow { color: #E47911; font-weight: bold; padding-right: 6px; }
.nobullet { list-style-type: none }
.homepageTitle { font-size: 28pt; font-family: 'Arial Bold', Arial; font-weight: 800; font-variant: normal; color: #80B6CE; line-height:1em; }
div.unified_widget p { margin:0 0 0.5em 0; line-height:1.4em; }
div.unified_widget h2 { color:#E47911; padding:0; }
.amabot_right div.unified_widget .headline, .amabot_left div.unified_widget .headline { color: #E47911; font-size: .92em; display: block; font-weight: bold; }
div.unified_widget sup { font-weight:normal; font-size: 75%; }
div.unified_widget h2 sup { font-size: 50%; }
td.amabot_left div.unified_widget h2, td.amabot_right div.unified_widget h2, div.amabot_left div.unified_widget h2, div.amabot_right div.unified_widget h2 { font-size:100%; margin:0 0 0.5em 0; }
td.amabot_center div.unified_widget h2, div.amabot_center div.unified_widget h2 { font-size:18px; font-weight:normal; margin:0 0 0.35em 0px; }
td.amabot_center, div.amabot_center { padding:5px 15px 5px 10px; }
div.unified_widget ul { margin: 1em 0; padding: 0 0 0 15px; list-style-position:inside; }
div.unified_widget ol { margin:0; padding:0 0 0 2.5em; }
div.unified_widget a:link, div.unified_widget a:visited { text-decoration:underline; }
div.unified_widget a:hover { text-decoration:underline; }
div.unified_widget p.seeMore { clear:both; font-family:arial,verdana,helvetica,sans-serif; margin:0; padding-left:1.15em; text-indent: -1.15em; font-size:100%; font-weight:normal; }
div.unified_widget p.seeMore a:link, div.unified_widget p.seeMore a:visited { text-decoration:underline; }
div.unified_widget p.seeMore a:hover { text-decoration: underline; }
div.unified_widget .carat, div.left_nav .carat { font-weight:bold; font-size:120%; font-family:verdana,arial,helvetica,sans-serif; color:#E47911; margin-right:0.20em; }
div.unified_widget a img { border:0; }
div.h_rule { clear:both; }
div#centerrightspancol div.h_rule { clear:right; }
div.unified_widget { margin-bottom:2em; clear:both; }
div.unified_widget div.col1 { width: 100%; }
div.unified_widget div.col2 { width: 49%; }
div.unified_widget div.col3 { width: 32%; }
div.unified_widget div.col4 { width: 24%; }
div.unified_widget div.col5 { width: 19%; }
div.unified_widget table { border:0; border-collapse:collapse; width:100%; }
div.unified_widget td { padding:0 8px 8px 0; vertical-align:top; }
div.unified_widget table.col1 td { width:100%; }
div.unified_widget table.col2 td { width:49%; }
div.unified_widget table.col3 td { width:32%; }
div.unified_widget table.col4 td { width:24%; }
div.unified_widget table.col5 td { width:19%; }
div.unified_widget td.bottom { vertical-align:baseline; }
div.unified_widget table h4, div.unified_widget h4 { color:#000; font-size:100%; font-weight:normal; margin:0; padding:0; }
div.rcmBody div.prodImage, amabot_widget div.prodImage {float:left; margin:0px 0.5em 0.25em 0px;}
td.amabot_right div.unified_widget, td.amabot_left div.unified_widget, div.amabot_right div.unified_widget, div.amabot_left div.unified_widget { border: 1px solid #C9E1F4; padding: 8px; margin-bottom:20px; }
* html td.amabot_right div.unified_widget, * html div.amabot_right div.unified_widget { height:100%; }
* html td.amabot_left div.unified_widget, * html div.amabot_left div.unified_widget { height:100%; }
div.rcmBody, amabot_widget div.rcmBody { line-height:1.4em; }
div.rcmBody a:link, div.rcmBody a:visited { text-decoration: underline; }
div.rcmBody p.seeMore, amabot_widget div.rcmBody p.seeMore { margin-top:0.5em; }
div.rcmBody div.bannerImage { text-align:center; }
div.rcmBody h2 span.homepageTitle { display:block; margin-bottom:-0.3em; margin-top:-0.12em; line-height:1em; }
div.rcmBody h2 img { float:none; }
table.coopTable div.rcmBody .headline { font-size: 110%; }
table.coopTable div.rcmBody h2 { font-size: 110%; font-weight:bold; }
table.promo div.rcmBody h2 { font-size: 100%; font-weight:bold; }
div.left_nav { font-family: Arial, sans-serif; font-size:100%; margin:0; line-height:1.05em; width:100%; border: 1px solid #C9E1F4; padding-bottom:10px; }
div.left_nav h2 { margin:0 0 0 0; color: #000000; font-weight: bold; line-height: 1.25em; font-size: 100%; font-family: arial,verdana,helvetica,sans-serif; padding: 3px 6px; background-color: #EAF3FE; }
div.left_nav h3 { font-family: arial,verdana,helvetica,sans-serif; margin:0.5em 0 0.4em 0.5em; color: #E47911; font-weight: bold; line-height: 1em; font-size:100%; padding-right:0.5em; }
div.left_nav ul { margin:0; padding:0; }
div.left_nav li, div.left_nav p { list-style: none; margin:0.5em 0.5em 0 1em; line-height:1.2em; }
div.left_nav hr { margin: 1em 0.5em; border-top:0; border-left:0; border-right:0; border-bottom: 1px dashed #cccccc; }
div.left_nav a:link, div.left_nav a:visited { color: #003399; text-decoration: none; font-family: Arial, sans-serif; }
div.left_nav a:hover { color: #2a70fc; text-decoration: underline; }
div.left_nav p.seeMore { padding-left:0.9em; text-indent:-0.9em; margin-top: 0.35em; margin-bottom: 1em; }
div.left_nav p.seeMore a:link, div.left_nav p.seeMore a:visited { text-decoration:none; }
div.left_nav p.seeMore a:hover { text-decoration:underline; }
div.seller_central li { font-size:95%; }
div.leftnav_popover { width:35em; border:3px solid #ededd3; padding:10px; }
div.leftnav_popover li { font-size: 100%; }
div.leftnav_popover h2 { font-family:arial,verdana,helvetica,sans-serif; margin:0 0 0.5em 0; color:#E47911; line-height: 1em; font-size:100%; padding-right:0.5em; background-color: #FFFFFF; padding-left:0; }
div.leftnav_popover ul.popover_col { float:left; width:33%; margin:0; padding:0; }
div.leftnav_popover ul.popover_col li { list-style:none; font-size:90%; line-height:1.5em; line-height:1.2em; margin: 0 5px 0.7em 0 }
div.leftnav_popover ul.popover_col li a { text-decoration:none; }
div.leftnav_popover ul.popover_col li a:hover { text-decoration:underline; }
div.leftnav_popover p.seeMore { margin-left:0; }
div.leftnav_popover div.h_rule_popup { clear:left; margin-bottom: 5px; border-bottom:1px dashed #cccccc; }
div.asinItem { float:left; margin-bottom:1em; width:32%; }
div.asinTextBlock { padding:0 8px 8px 0; }
div.asinItem div.prodImage { height:121px; display:table-cell; vertical-align:bottom; }
div.asinItem div.localImage { display:table-cell; vertical-align:bottom; }
div.asinItem span { margin: 0.5em 0 0.25em 0; }
div.asinItem ul { margin:0; padding:0 0 0.5em 1.3em; text-indent: -1.3em; font-size:90%; }
div.asinTitle {padding-top:3px; padding-bottom:2px;}
div.row { clear:both; }
body.dp {}
body.dp div.h_rule { clear:none; }
body.dp div.unified_widget { clear:none; }
div.asinCoop div.asinItem { float:none; width:100%;}
div.asinCoop_header {}
div.asinCoop_footer {}
div.newAndFuture div.asinItem ul { font-size:100%; }
div.newAndFuture div.asinItem li { list-style-position: outside; margin:0 0 0.35em 20px; padding:0; text-indent: 0; }
div.newAndFuture h3 { font-size:100%; margin:1em 0 ; }
div.newAndFuture a:link, div.newAndFuture a:visited { text-decoration:underline; }
div.newAndFuture a:hover { text-decoration:underline; }
div.newAndFuture p.seeMore { margin:-0.75em 0 0 35px; }
div.unified_widget ol.topList { margin: 0; padding: 0; list-style: none; }
div.unified_widget ol.topList li { list-style: none; clear: both; display: list-item; padding-top: 6px; }
div.unified_widget ol.topList .productImage { display: block; float: left;vertical-align: top;text-align: center;width:60px; }
div.unified_widget ol.topList .productText { display: block; float: left; padding-left:10px; vertical-align: top; }
:root div.unified_widget span.productImage { display: table-cell; float: none; }
:root div.unified_widget span.productText { display: table-cell; float: none; }
div.unified_widget dl.priceBlock {margin:0 0 0.45em 0;}
div.unified_widget dl.priceBlock dt {clear:left; font-weight:bold; float:left; margin:0 0.3em 0 0;}
div.unified_widget dl.priceBlock dd {margin:0 0 0.2em 0;}
div.unified_widget .bold {font-weight:bold;}
div.unified_widget .byline { font-size: 95%; font-weight: normal; }
table.thirdLvlNavContent div.blurb { margin:10px; }
div.pageBanner h1 { font-family:Arial, Helvetica, sans-serif; font-weight:normal; font-size:225%; color: #e47911; letter-spacing:-0.03em; margin:0; }
div.pageBanner p { font-size:90%; color:#888888; margin:0; }
div.pageBanner h1.bkgnd { background-repeat:no-repeat; background-color:#FFFFFF; overflow:hidden; text-indent:-100em; }
div.blurb div.title
{
font-weight:bold; padding-top:5px; padding-bottom:2px;
}
--></style>
<style type="text/css">
<!--
div#leftcol, div#leftcolhidden {
width: 185px;
}
div#leftcolwide, div#leftcolhiddenwide {
float: left;
width: 300px;
display: inline;
clear: both;
margin: 0px 15px 0 0;
}
* html div#leftcolwide, div#leftcolhiddenwide {
margin: 0px 15px 0 0;
}
div#centercolwide {
overflow: hidden;
clear: right;
}
* html div#centercolwide {
width: 100%;
}
div#leftcolbtf div.unified_widget, div#rightcolbtf2 div.unified_widget {
border: none;
}
div#leftcolbtf h2, div#rightcolbtf2 h2 {
color: #333;
border-bottom: 1px solid #DDDDDD;
padding-bottom: 4px;
font-weight: normal;
line-height: 14px;
font-size: 14px;
}
.leftNav { margin-bottom: 5px; line-height: 1em;
}
.leftNavTitle { font-family: tahoma, sans-serif; margin-top: 10px;
margin-bottom: 6px; color: #c60; font-weight: bold; line-height: 1em;
}
.hr-leftbrowse { border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;
border-top-style: dashed; border-right-style: none; border-bottom-style: none; border-left-style: none;
border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999;
margin-top: 10px; margin-right: 5px; margin-bottom: 0px; margin-left: 5px;
}
.leftNav a:link, .leftNav a:visited, .amabot_left .amabot_widget a:link, .amabot_left .amabot_widget a:visited { text-decoration: none;
}
.leftNav a:hover, .amabot_left .amabot_widget a:hover { color: #c60; text-decoration: underline; }
.browsetitle {
font-family: tahoma,sans-serif;
line-height: 11px;
font-size: 14px;
font-weight: bold;
color: white;
}
div.amabot_center div.unified_widget h2 { border-bottom:1px solid #ddd; padding-bottom:2px; }
#centerA {overflow:hidden;padding:15px 15px 5px 0px;}
#centerB {overflow:hidden;padding:0px 15px 5px 0px;}
.gwcswWrap {width:660px;}
div#gwcswA {margin:auto;}
div#gwcswB {margin:19px auto 0 auto;padding-bottom:15px;}
.gwcswWrap .gwcswNav {height:33px;}
.gwcswWrap .gwcswSlots {line-height:0px;height:180px;overflow:hidden;}
.gwcswWrap .gwcswSlot {height:180px;}
#center2 {overflow:hidden;margin-top:19px;}
-->
</style>
<script language="Javascript1.1" type="text/javascript">
<!--
function amz_js_PopWin(url,name,options){
var ContextWindow = window.open(url,name,options);
ContextWindow.focus();
return false;
}
//-->
</script>
<style>
.tcg h2, .tcg h2 a, .tcg h2 a:active, .tcg h2 a:hover, .tcg h2 a:visited{
font-family:Arial,Verdana,Helvetica,sans-serif;
}
.tcg1 .hdlnblk h2, .tcg2 .hdlnblk h2 {
font-size:37px;
line-height:1em;
}
.tcg1 .subhed {
font-size:23px;
}
.tcg4 .hdlnblk h2 {
font-size:29px;
}
.tcg4 .subhed {
font-size:1.6em;
}
</style>
<!--btech-iplc-->
<script type="text/javascript">
btiplv = new Image();
if (typeof uet == 'function') {
BtechCF.inc();
btiplv.onload = function() { BtechCF.cf(); };
}
btiplv.src = "http://g-ecx.images-amazon.com/images/G/01/kindle/merch/gw/bunkbed/back-to-school12-gw-02-660x180._V391158221_.png";
new Image().src = "http://g-ecx.images-amazon.com/images/G/01/Books/grutty/GW_Textbooks_RBS_300x75._V393117433_.png";
</script>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="google-site-verification" content="9vpzZueNucS8hPqoGpZ5r10Nr2_sLMRG3AnDtNlucc4" />
<meta name="description" content="Online shopping from the earth's biggest selection of books, magazines, music, DVDs, videos, electronics, computers, software, apparel & accessories, shoes, jewelry, tools & hardware, housewares, furniture, sporting goods, beauty & personal care, broadband & dsl, gourmet food & just about anything else."/>
<meta name="keywords" content="Amazon, Amazon.com, Books, Online Shopping, Book Store, Magazine, Subscription, Music, CDs, DVDs, Videos, Electronics, Video Games, Computers, Cell Phones, Toys, Games, Apparel, Accessories, Shoes, Jewelry, Watches, Office Products, Sports & Outdoors, Sporting Goods, Baby Products, Health, Personal Care, Beauty, Home, Garden, Bed & Bath, Furniture, Tools, Hardware, Vacuums, Outdoor Living, Automotive Parts, Pet Supplies, Broadband, DSL"/>
<title>Amazon.com: Online Shopping for Electronics, Apparel, Computers, Books, DVDs & more</title>
<script type="text/javascript">
var amznJQ,jQueryPatchIPadOffset=false;
(function() {
function f() {}
function ch(y) {return String.fromCharCode(y);}
amznJQ={
addLogical:f,
addStyle:f,
addPL:f,
available:f,
chars:{EOL:ch(10), SQUOTE:ch(39), DQUOTE:ch(34), BACKSLASH:ch(92), YEN:ch(165)},
completedStage:f,
declareAvailable:f,
onCompletion:f,
onReady:f,
strings:{}
};
}());
</script>
<link type='text/css' href='http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/websiteGridCSS/websiteGridCSS-websiteGridCSS-10164._V1_.css' rel='stylesheet'>
<link type='text/css' href='http://z-ecx.images-amazon.com/images/G/01/browser-scripts/us-site-wide-css-beacon/site-wide-5808467376._V1_.css' rel='stylesheet'>
<style type="text/css">
body {font-family: Arial,Verdana, "Helvetica Neue", Helvetica, sans-serif;}
h1.t9,h2.t9,h3.t9,h4.t9,h5.t9,h6.t9,h1.t10,h2.t10,h3.t10,h4.t10,h5.t10,h6.t10,h1.t11,h2.t11,h3.t11,h4.t11,h5.t11,h6.t11,h1.t12,h2.t12,h3.t12,h4.t12,h5.t12,h6.t12 { font-family: Arial, Verdana, "Helvetica Neue", Helvetica, sans-serif;}
input, textarea {font-family: arial, verdana, sans-serif;}
.category .carat {font-family:arial,verdana,,helvetica,sans-serif;}
</style>
</head>
<body>
<a name="top"></a>
<div style="position:absolute; left:0px; top:-500px; width:1px;height:1px; overflow:hidden;">
<a href="/access">A different version of this web site containing similar content optimized for screen readers and mobile devices may be found at the web address: www.amazon.com/access</a>
</div>
<!-- BeginNav -->
<style type="text/css"><!--
.nav-sprite {
background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V394051227_.png);
}
.nav_pop_h {
background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-h-v2._V137157005_.png);
}
.nav_pop_v {
background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-v-v2._V137157005_.png);
}
.nav_ie6 .nav_pop_h {
background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-h._V155961234_.png);
}
.nav_ie6 .nav_pop_v {
background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-v._V155961234_.png);
}
.nav-ajax-loading .nav-ajax-message {
background: center center url(http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif) no-repeat;
}
--></style>
<img src="http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V394051227_.png" style="display:none" alt=""/>
<img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif" style="display:none" alt="" id="nav_trans_pixel"/>
<script type="text/javascript"><!--
window._navbarSpriteUrl = "http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V394051227_.png";
amznJQ.available('popover', function() {
amznJQ.available('navbarBTF', function() {
var ie6 = jQuery.browser.msie && parseInt(jQuery.browser.version) <= 6,
h = new Image(), v = new Image(), c = 0, b, f, bi,
fn = function(p){ switch(typeof p){ case'boolean':{b=p;bi=1;break} case'function':{f=p} default:{c++} } if(bi&&c>2)f(b) };
h.onload = fn; v.onload = fn;
h.src = (ie6 ? 'http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-h._V155961234_.png' : 'http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-h-v2._V137157005_.png');
v.src = (ie6 ? 'http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-v._V155961234_.png' : 'http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-v-v2._V137157005_.png');
window._navpreload = {'sprite_h':h, 'sprite_v':v, '_protectExposeSBD':fn};
_navpreload._menuCallback = function() {
_navpreload.spin = new Image();
_navpreload.spin.src = 'http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif';
};
});
});
--></script>
<!--Pilu -->
<script type='text/javascript'><!--
window.Navbar = function(options) {
options = options || {};
this._loadedCount = 0;
this._hasUedata = (typeof uet == 'function');
this._finishLoadQuota = options['finishLoadQuota'] || 2;
this._startedLoading = false;
this._btfFlyoutContents = [];
this._saFlyoutHorizOffset = -16;
this._saMaskHorizOffset = -17;
this._sbd_config = {
major_delay: 300,
minor_delay: 100,
target_slop: 25
};
this.addToBtfFlyoutContents = function(content, callback) {
this._btfFlyoutContents.push({content: content, callback: callback});
}
this.getBtfFlyoutContents = function() {
return this._btfFlyoutContents;
}
this.loading = function() {
if (!this._startedLoading && this._isReportingEvents()) {
uet('ns');
}
this._startedLoading = true;
}
this.componentLoaded = function() {
this._loadedCount++;
if (this._startedLoading && this._isReportingEvents() && (this._loadedCount == this._finishLoadQuota)) {
uet('ne');
}
}
this._isReportingEvents = function() {
return this._hasUedata;
}
this.browsepromos = {};
this.issPromos = [];
this.le = {};
this.logEv = function(d, o) {
}
}
window._navbar = new Navbar({ finishLoadQuota: 1});
_navbar.loading();
_navbar._ajaxProximity = [141,7,60,150];
--></script>
<!-- navp-JrsrRDHJvHJdBMmtW7d5dloEuygf/fS9Snj/lKuEgGtI8fYGDoUHdE5B0XtDi/jlWlv8q7KIE84= rid-0MSRC4HCMZGT5XEGM66M templated -->
<style type="text/css"><!--
.nav-searchfield-width {
padding: 0 2px 0 43px;
}
#nav-search-in {
width: 43px;
}
--></style>
<style type="text/css"><!--
select#searchDropdownBox {
visibility: visible;
display: block;
}
div.nav-searchfield-width {
padding-left: 200px;
}
span#nav-search-in {
width: 200px;
}
#nav-search-in span#nav-search-in-content {
display: none;
}
--></style>
<header>
<div id='navbar' class='nav-beacon nav-logo-large'>
<div id='nav-cross-shop'>
<a href='/' id='nav-logo' class='nav_a nav-sprite' alt='Amazon'>
Amazon
<span class='nav-prime-tag nav-sprite'></span>
</a>
<ul id='nav-cross-shop-links' >
<li class='nav-xs-link first'><a href='/gp/yourstore/home' class='nav_a' id='nav-your-amazon'>Your Amazon.com</a></li>
<li class='nav-xs-link '><a href='/gp/goldbox' class='nav_a'>Today's Deals</a></li>
<li class='nav-xs-link '><a href='/gp/gc/nav-split' class='nav_a'>Gift Cards</a></li>
<li class='nav-xs-link '><a href='/Help/b?ie=UTF8&node=508510' class='nav_a'>Help</a></li>
</ul>
<div id='welcomeRowTable' style='height:50px'>
<!--[if IE ]><div class='nav-ie-min-width' style='width: 770px'></div><![endif]-->
<div id='nav-ad-background-style' style='background-position: -800px 0px; background-image: url(http://g-ecx.images-amazon.com/images/G/01/img12/books/300x50/btc_swm_noasin_300x50._V391518517_.gif); height: 56px; margin-bottom: -6px; position: relative;background-repeat: no-repeat;'>
<div id='navSwmSlot'>
<div id="navSwmHoliday" style="background-image: url(http://g-ecx.images-amazon.com/images/G/01/img12/books/300x50/btc_swm_noasin_300x50._V391518517_.gif); width: 300px; height: 50px; ">
<img alt='Off to College' src='http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif' border='0' width='300px' height='50px' usemap='#nav-swm-holiday-map' > </div>
<div style="display: none;">
<map id="nav-swm-holiday-map" name="nav-swm-holiday-map">
<area shape="rect" coords="1,2,300,50" href ="/Off-to-College-Supplies/b?ie=UTF8&node=668781011" alt ="Off to College" />
</map>
</div>
</div>
</div>
</div>
<div style='clear: both;'></div>
</div>
<div id='nav-bar-outer'>
<div id='nav-logo-borderfade'><div class='nav-fade-mask'></div><div class='nav-fade nav-sprite'></div></div>
<div id='nav-bar-inner' class='nav-sprite'>
<a id='nav-shop-all-button' href='/gp/site-directory' class='nav_a nav-button-outer nav-menu-inactive' alt='Shop By Department'>
<span class='nav-button-mid nav-sprite'>
<span class='nav-button-inner nav-sprite'>
<span class='nav-button-title nav-button-line1'>Shop by</span>
<span class='nav-button-title nav-button-line2'>Department</span>
</span>
</span>
<span class='nav-down-arrow nav-sprite'></span>
</a>
<label id='nav-search-label' for='twotabsearchtextbox'>
Search
</label>
<div>
<form
action='/s'
method='get' name='site-search'
class='nav-searchbar-inner'
>
<span id='nav-search-in' class='nav-sprite'>
<span id='nav-search-in-content' data-value="search-alias=aps">
All
</span>
<span class='nav-down-arrow nav-sprite'></span>
<select name="url" id="searchDropdownBox" class="searchSelect" title="Search in" ><option value="search-alias=aps" selected="selected">All Departments</option><option value="search-alias=instant-video">Amazon Instant Video</option><option value="search-alias=appliances">Appliances</option><option value="search-alias=mobile-apps">Apps for Android
</option><option value="search-alias=arts-crafts">Arts, Crafts & Sewing</option><option value="search-alias=automotive">Automotive</option><option value="search-alias=baby-products">Baby</option><option value="search-alias=beauty">Beauty</option><option value="search-alias=stripbooks">Books</option><option value="search-alias=mobile">Cell Phones & Accessories</option><option value="search-alias=apparel">Clothing & Accessories</option><option value="search-alias=collectibles">Collectibles</option><option value="search-alias=computers">Computers</option><option value="search-alias=electronics">Electronics</option><option value="search-alias=gift-cards">Gift Cards</option><option value="search-alias=grocery">Grocery & Gourmet Food</option><option value="search-alias=hpc">Health & Personal Care</option><option value="search-alias=garden">Home & Kitchen</option><option value="search-alias=industrial">Industrial & Scientific</option><option value="search-alias=jewelry">Jewelry</option><option value="search-alias=digital-text">Kindle Store</option><option value="search-alias=magazines">Magazine Subscriptions</option><option value="search-alias=movies-tv">Movies & TV</option><option value="search-alias=digital-music">MP3 Downloads</option><option value="search-alias=popular">Music</option><option value="search-alias=mi">Musical Instruments</option><option value="search-alias=office-products">Office Products</option><option value="search-alias=lawngarden">Patio, Lawn & Garden</option><option value="search-alias=pets">Pet Supplies</option><option value="search-alias=shoes">Shoes</option><option value="search-alias=software">Software</option><option value="search-alias=sporting">Sports & Outdoors</option><option value="search-alias=tools">Tools & Home Improvement</option><option value="search-alias=toys-and-games">Toys & Games</option><option value="search-alias=videogames">Video Games</option><option value="search-alias=watches">Watches</option></select>
</span>
<div class='nav-searchfield-outer nav-sprite'>
<div class='nav-searchfield-inner nav-sprite'>
<div class='nav-searchfield-width'>
<div id='nav-iss-attach'>
<input type='text' id='twotabsearchtextbox' title='Search For' value='' name='field-keywords' autocomplete='off'>
</div>
</div>
<!--[if IE ]><div class='nav-ie-min-width' style='width: 360px'></div><![endif]-->
</div>
</div>
<div class='nav-submit-button nav-sprite'>
<input
type='submit'
value='Go'
class='nav-submit-input'
title='Go'
>
</div>
</form>
</div>
<a id='nav-your-account' href='https://www.amazon.com/gp/css/homepage.html' class='nav_a nav-button-outer nav-menu-inactive' alt='Your Account'>
<span class='nav-button-mid nav-sprite'>
<span class='nav-button-inner nav-sprite'>
<span id='nav-signin-title' class='nav-button-title nav-button-line1' >
Hello.
<span id='nav-signin-text' class='nav-button-em'>Sign in</span>
</span>
<span class='nav-button-title nav-button-line2'>Your Account</span>
</span>
</span>
<span class='nav-down-arrow nav-sprite'></span>
</a>
<span class='nav-divider nav-divider-account'></span>
<a id='nav-cart' href='/gp/cart/view.html' class='nav_a nav-button-outer nav-menu-inactive' alt='Shopping Cart'>
<span class='nav-button-mid nav-sprite'>
<span class='nav-button-inner nav-sprite'>
<span class='nav-button-title nav-button-line1'> </span>
<span class='nav-button-title nav-button-line2'>Cart</span>
<span class='nav-cart-button nav-sprite'></span>
<span id='nav-cart-count' class='nav-cart-0'>0</span>
</span>
</span>
<span class='nav-down-arrow nav-sprite'></span>
</a>
<span class='nav-divider nav-divider-cart'></span>
<a id='nav-wishlist' href='/gp/registry/wishlist' class='nav_a nav-button-outer nav-menu-inactive' alt='Wish List'>
<span class='nav-button-mid nav-sprite'>
<span class='nav-button-inner nav-sprite'>
<span class='nav-button-title nav-button-line1'>Wish</span>
<span class='nav-button-title nav-button-line2'>List</span>
</span>
</span>
<span class='nav-down-arrow nav-sprite'></span>
</a>
<ul id='nav-subnav' style='display: none;'>
<li class='nav-subnav-item nav-category-button'>
<a href='' class='nav_a'>
</a>
</li>
<li class="nav-subnav-item ">
<a href='' class='nav_a'>
</a>
</li>
<li class="nav-subnav-item ">
<a href='' class='nav_a'>
</a>
</li>
</ul>
</div>
</div>
</div>
</header>
<div id="nav_exposed_anchor"></div>
<script type="text/javascript"><!--
_navbar.dynamicMenuUrl = '/gp/navigation/ajax/dynamicmenu.html';
_navbar.dynamicMenus = false;
_navbar.cartDropdown = true;
_navbar.yourAccountClickable = true;
_navbar.readyOnATF = true;
_navbar.abbrDropdown = true;
_navbar._endSpriteImage = new Image();
_navbar._endSpriteImage.onload = function() {_navbar.componentLoaded(); };
_navbar._endSpriteImage.src = window._navbarSpriteUrl;
_navbar.responsivegw = true;
amznJQ.declareAvailable('navbarPromosContent');
--></script>
<!--Tilu -->
<!-- EndNav -->
<div id="page-wrap">
<div id="content">
<div id="leftcol" style="display:none;"></div>
<div class="amabot_right" id="rightcol" style="clear:right;">
<div style="display:none;"></div><table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td align="center"><map name="TextbooksGW"><area shape="rect" coords="0,0,300,75" alt="Textbooks" href="/New-Used-Textbooks-Books/b?ie=UTF8&node=465600"/> </map><img src="http://g-ecx.images-amazon.com/images/G/01/Books/grutty/GW_Textbooks_RBS_300x75._V393117433_.png" width="300" align="center" usemap="#TextbooksGW" alt="Amazon Textbooks" height="75" border="0" /></td></tr></table><br>
<div id="rightcolbtf2"><div style="height:400px;"> </div></div>
<div id="rightcolbtf2"><div style="height:200px;"> </div></div>
</div>
<div id="centerA" class="">
<style type="text/css">
.gwcswWrap .gwcswNav{display:none;}
</style>
<div id="gwcswA" class="gwcswWrap">
<div class="gwcswNav">
</div>
<div class="gwcswSlots">
<div class="gwcswSlot" style="display:block;">
<div style="display:none;"></div><div style="display:none;" id="title">Kindle</div><div style="display:none;" id="hover">Kindle, from $79</div><table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td align="center"><map name="gw_kindle_gen_nown_summerread"><area shape="rect" coords="0,0,660,180" alt="Kindle, from $79" href="/gp/product/B0051QVESA?ie=UTF8&nav_sdd=aps"/> </map><img src="http://g-ecx.images-amazon.com/images/G/01/kindle/merch/gw/bunkbed/back-to-school12-gw-02-660x180._V391158221_.png" width="660" align="center" usemap="#gw_kindle_gen_nown_summerread" alt="Kindle: Back to School. From $79" height="180" border="0" /></td></tr></table><br>
</div>
</div>
</div>
</div>
<script>
if(typeof uet == 'function'){
uet('af');
BtechCF.cf();
}
</script>
<div style="display: none;">
<div id="nav_browse_flyout">
<div id="nav_subcats_wrap" class="nav_browse_wrap">
<div id="nav_subcats">
<div id="nav_subcats_0" class="nav_browse_subcat" data-nav-promo-id="instant-video">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Unlimited Instant Videos</li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2676882011" class="nav_a">Prime Instant Videos</a><div class="nav_tag">Unlimited streaming of thousands of<br />movies and TV shows with Amazon Prime</div></li>
<li class="nav_pop_li "><a href="/gp/prime/signup/videos?ie=UTF8&redirectQueryParams=bm9kZT0yNjE1MjYwMDEx&redirectURL=L2Iv" class="nav_a">Learn More About Amazon Prime</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/Instant-Video/b?ie=UTF8&node=2858778011" class="nav_a">Amazon Instant Video Store</a><div class="nav_tag">Rent or buy hit movies and TV shows<br />to stream or download</div></li>
<li class="nav_pop_li "><a href="/gp/video/watchlist/" class="nav_a">Your Watchlist</a><div class="nav_tag">Organize movies and TV seasons<br />you want to watch later</div></li>
<li class="nav_pop_li "><a href="/gp/video/library" class="nav_a">Your Video Library</a><div class="nav_tag">Your movies and TV shows<br />stored in the cloud</div></li>
<li class="nav_pop_li "><a href="/gp/video/ontv/ontv" class="nav_a">Watch Anywhere</a><div class="nav_tag">Watch instantly on your Kindle Fire,<br />TV, Blu-ray player, or set-top box</div></li>
</ul>
</div>
<div id="nav_subcats_1" class="nav_browse_subcat" data-nav-promo-id="mp3">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">MP3s & Cloud Player</li>
<li class="nav_pop_li "><a href="/MP3-Music-Download/b?ie=UTF8&node=163856011" class="nav_a">MP3 Music Store</a><div class="nav_tag">Shop 20 million songs</div></li>
<li class="nav_pop_li "><a href="/gp/dmusic/marketing/CloudPlayerLaunchPage" target="_blank" class="nav_a">Cloud Player for Web</a><div class="nav_tag">Play from any browser</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000454841" class="nav_a">Cloud Player for Android</a><div class="nav_tag">For Android and Kindle Fire</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000776061" class="nav_a">Cloud Player for iOS</a><div class="nav_tag">For iPhone and iPod touch</div></li>
</ul>
</div>
<div id="nav_subcats_2" class="nav_browse_subcat" data-nav-promo-id="cloud-drive">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Amazon Cloud Drive</li>
<li class="nav_pop_li "><a href="/clouddrive" target="_blank" class="nav_a">Your Cloud Drive</a><div class="nav_tag">5 GB of free storage</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000796781" class="nav_a">Get the Desktop App</a><div class="nav_tag">For Windows and Mac</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000796931" class="nav_a">Learn More About Cloud Drive</a></li>
</ul>
</div>
<div id="nav_subcats_3" class="nav_browse_subcat" data-nav-promo-id="kindle">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Kindle</li>
<li class="nav_pop_li "><a href="/dp/B0051QVESA" class="nav_a">Kindle $79</a><div class="nav_tag">Lighter, smaller, faster</div></li>
<li class="nav_pop_li "><a href="/dp/B005890G8Y" class="nav_a">Kindle Touch $99</a><div class="nav_tag">Simple-to-use touchscreen</div></li>
<li class="nav_pop_li "><a href="/dp/B005890G8O" class="nav_a">Kindle Touch 3G $149</a><div class="nav_tag">The top-of-the-line e-reader</div></li>
<li class="nav_pop_li "><a href="/dp/B0051VVOB2" class="nav_a">Kindle Fire $199</a><div class="nav_tag">Vibrant color, movies, apps, and more</div></li>
<li class="nav_pop_li "><a href="/dp/B002GYWHSQ" class="nav_a">Kindle DX $379</a><div class="nav_tag">Large 9.7" E Ink Display</div></li>
<li class="nav_pop_li "><a href="/Kindle-Accessories/b?ie=UTF8&node=1268192011" class="nav_a">Accessories</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/gp/redirect.html?ie=UTF8&location=%2Fkindlelendinglibrary" class="nav_a">Kindle Owners' Lending Library</a><div class="nav_tag">With Prime, Kindle owners read for free</div></li>
<li class="nav_pop_li "><a href="https://www.amazon.com:443/gp/redirect.html?location=https://read.amazon.com/&token=34AD60CFC4DCD7A97D4E2F4A4A7C4149FBEEF236" class="nav_a">Kindle Cloud Reader</a><div class="nav_tag">Read your Kindle books in a browser</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000493771" class="nav_a">Free Kindle Reading Apps</a><div class="nav_tag">For PC, iPad, iPhone, Android, and more</div></li>
<li class="nav_pop_li "><a href="/Kindle-eBooks/b?ie=UTF8&node=1286228011" class="nav_a">Kindle Books</a></li>
<li class="nav_pop_li "><a href="/gp/digital/fiona/redirect/newsstand/home/" class="nav_a">Newsstand</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/kindle-store-ebooks-newspapers-blogs/b?ie=UTF8&node=133141011" class="nav_a">Kindle Store</a></li>
<li class="nav_pop_li "><a href="/gp/digital/fiona/manage" class="nav_a">Manage Your Kindle</a></li>
</ul>
</div>
<div id="nav_subcats_4" class="nav_browse_subcat" data-nav-promo-id="android">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Appstore for Android</li>
<li class="nav_pop_li "><a href="/mobile-apps/b?ie=UTF8&node=2350149011" class="nav_a">Apps</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2478844011" class="nav_a">Games</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/b?ie=UTF8&node=3071729011" class="nav_a">Test Drive Apps</a><div class="nav_tag">Try thousands of apps and games right now</div></li>
<li class="nav_pop_li "><a href="/gp/feature.html?ie=UTF8&docId=1000645111" class="nav_a">Amazon Apps</a><div class="nav_tag">Kindle, mobile shopping, MP3, and more</div></li>
<li class="nav_pop_li "><a href="/gp/mas/your-account/myapps" class="nav_a">Your Apps and Devices</a><div class="nav_tag">View your apps and manage your devices</div></li>
</ul>
</div>
<div id="nav_subcats_5" class="nav_browse_subcat" data-nav-promo-id="digital-games-software">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Digital Games & Software</li>
<li class="nav_pop_li "><a href="/Game-Downloads/b?ie=UTF8&node=979455011" class="nav_a">Game Downloads</a><div class="nav_tag">For PC and Mac</div></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=5267605011" class="nav_a">Free-to-Play Games</a><div class="nav_tag">For PC and Mac</div></li>
<li class="nav_pop_li "><a href="/pc-mac-software-downloads/b?ie=UTF8&node=1233514011" class="nav_a">Software Downloads</a><div class="nav_tag">For PC and Mac</div></li>
<li class="nav_pop_li "><a href="/gp/swvgdtt/your-account/manage-downloads.html" class="nav_a">Your Games & Software Library</a></li>
</ul>
</div>
<div id="nav_subcats_6" class="nav_browse_subcat" data-nav-promo-id="audible">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Audible Audiobooks</li>
<li class="nav_pop_li "><a href="/gp/audible/signup/display.html" class="nav_a">Audible Membership</a><div class="nav_tag">Get to know Audible</div></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2402172011" class="nav_a">Audible Audiobooks & More</a></li>
<li class="nav_pop_li "><a href="/gp/bestsellers/books/2402172011" class="nav_a">Bestsellers</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2669348011" class="nav_a">New & Notable</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2669344011" class="nav_a">Listener Favorites</a></li>
</ul>
</div>
<div id="nav_subcats_7" class="nav_browse_subcat" data-nav-promo-id="books">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Books</li>
<li class="nav_pop_li "><a href="/books-used-books-textbooks/b?ie=UTF8&node=283155" class="nav_a">Books</a></li>
<li class="nav_pop_li "><a href="/Kindle-eBooks/b?ie=UTF8&node=1286228011" class="nav_a">Kindle Books</a></li>
<li class="nav_pop_li "><a href="/Childrens-Books/b?ie=UTF8&node=4" class="nav_a">Children's Books</a></li>
<li class="nav_pop_li "><a href="/New-Used-Textbooks-Books/b?ie=UTF8&node=465600" class="nav_a">Textbooks</a></li>
<li class="nav_pop_li "><a href="/Audiobooks-Books/b?ie=UTF8&node=368395011" class="nav_a">Audiobooks</a></li>
<li class="nav_pop_li "><a href="/magazines/b?ie=UTF8&node=599858" class="nav_a">Magazines</a></li>
</ul>
</div>
<div id="nav_subcats_8" class="nav_browse_subcat" data-nav-promo-id="movies-music-games">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Movies, Music & Games</li>
<li class="nav_pop_li "><a href="/dvds-used-hd-action-comedy-oscar/b?ie=UTF8&node=2625373011" class="nav_a">Movies & TV</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2901953011" class="nav_a">Blu-ray</a></li>
<li class="nav_pop_li "><a href="/Instant-Video/b?ie=UTF8&node=2858778011" class="nav_a">Amazon Instant Video</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/music-rock-classical-pop-jazz/b?ie=UTF8&node=5174" class="nav_a">Music</a></li>
<li class="nav_pop_li "><a href="/MP3-Music-Download/b?ie=UTF8&node=163856011" class="nav_a">MP3 Downloads</a></li>
<li class="nav_pop_li "><a href="/musical-instruments-accessories-sound-recording/b?ie=UTF8&node=11091801" class="nav_a">Musical Instruments</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/computer-video-games-hardware-accessories/b?ie=UTF8&node=468642" class="nav_a">Video Games</a></li>
<li class="nav_pop_li "><a href="/Game-Downloads/b?ie=UTF8&node=979455011" class="nav_a">Game Downloads</a></li>
</ul>
</div>
<div id="nav_subcats_9" class="nav_browse_subcat nav_super_cat" data-nav-promo-id="electronics-computers">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Electronics</li>
<li class="nav_pop_li "><a href="/Televisions-Video/b?ie=UTF8&node=1266092011" class="nav_a">TV & Video</a></li>
<li class="nav_pop_li "><a href="/Home-Audio-Electronics/b?ie=UTF8&node=667846011" class="nav_a">Home Audio & Theater</a></li>
<li class="nav_pop_li "><a href="/Camera-Photo-Film-Canon-Sony/b?ie=UTF8&node=502394" class="nav_a">Camera, Photo & Video</a></li>
<li class="nav_pop_li "><a href="/cell-phones-service-plans-accessories/b?ie=UTF8&node=2335752011" class="nav_a">Cell Phones & Accessories</a></li>
<li class="nav_pop_li "><a href="/computer-video-games-hardware-accessories/b?ie=UTF8&node=468642" class="nav_a">Video Games</a></li>
<li class="nav_pop_li "><a href="/MP3-Players-Audio-Video/b?ie=UTF8&node=172630" class="nav_a">MP3 Players & Accessories</a></li>
<li class="nav_pop_li "><a href="/Car-Electronics/b?ie=UTF8&node=1077068" class="nav_a">Car Electronics & GPS</a></li>
<li class="nav_pop_li "><a href="/Appliances/b?ie=UTF8&node=2619525011" class="nav_a">Appliances</a></li>
<li class="nav_pop_li "><a href="/musical-instruments-accessories-sound-recording/b?ie=UTF8&node=11091801" class="nav_a">Musical Instruments</a></li>
</ul>
<ul class="nav_browse_ul nav_browse_cat2_ul">
<li class="nav_pop_li nav_browse_cat_head">Computers</li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2956501011" class="nav_a">Laptops, Tablets & Netbooks</a></li>
<li class="nav_pop_li "><a href="/Desktops-Computers-Add-Ons/b?ie=UTF8&node=565098" class="nav_a">Desktops & Servers</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=2956536011" class="nav_a">Computer Accessories & Peripherals</a><div class="nav_tag">External drives, mice, networking & more</div></li>
<li class="nav_pop_li "><a href="/PC-Components-Computer-Add-Ons-Computers/b?ie=UTF8&node=193870011" class="nav_a">Computer Parts & Components</a></li>
<li class="nav_pop_li "><a href="/design-download-business-education-software/b?ie=UTF8&node=229534" class="nav_a">Software</a></li>
<li class="nav_pop_li "><a href="/PC-Games/b?ie=UTF8&node=229575" class="nav_a">PC Games</a></li>
<li class="nav_pop_li "><a href="/Printers-Office-Electronics/b?ie=UTF8&node=172635" class="nav_a">Printers & Ink</a></li>
<li class="nav_pop_li "><a href="/office-products-supplies-electronics-furniture/b?ie=UTF8&node=1064954" class="nav_a">Office & School Supplies</a></li>
</ul>
</div>
<div id="nav_subcats_10" class="nav_browse_subcat nav_super_cat" data-nav-promo-id="home-garden-tools">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Home, Garden & Pets</li>
<li class="nav_pop_li "><a href="/kitchen-dining-small-appliances-cookware/b?ie=UTF8&node=284507" class="nav_a">Kitchen & Dining</a></li>
<li class="nav_pop_li "><a href="/furniture-decor-rugs-lamps-beds-tv-stands/b?ie=UTF8&node=1057794" class="nav_a">Furniture & Dcor</a></li>
<li class="nav_pop_li "><a href="/bedding-bath-sheets-towels/b?ie=UTF8&node=1057792" class="nav_a">Bedding & Bath</a></li>
<li class="nav_pop_li "><a href="/Appliances/b?ie=UTF8&node=2619525011" class="nav_a">Appliances</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/Patio-Lawn-Garden/b?ie=UTF8&node=2972638011" class="nav_a">Patio, Lawn & Garden</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/Arts-Crafts-Sewing/b?ie=UTF8&node=2617941011" class="nav_a">Arts, Crafts & Sewing</a></li>
<li class="nav_pop_li "><a href="/pet-supplies-dog-cat-food-bed-toy/b?ie=UTF8&node=2619533011" class="nav_a">Pet Supplies</a></li>
</ul>
<ul class="nav_browse_ul nav_browse_cat2_ul">
<li class="nav_pop_li nav_browse_cat_head">Tools, Home Improvement</li>
<li class="nav_pop_li "><a href="/Tools-and-Home-Improvement/b?ie=UTF8&node=228013" class="nav_a">Home Improvement</a></li>
<li class="nav_pop_li "><a href="/Power-Tools-and-Hand-Tools/b?ie=UTF8&node=328182011" class="nav_a">Power & Hand Tools</a></li>
<li class="nav_pop_li "><a href="/Lighting-and-Ceiling-Fans/b?ie=UTF8&node=495224" class="nav_a">Lamps & Light Fixtures</a></li>
<li class="nav_pop_li "><a href="/Kitchen-and-Bath-Fixtures/b?ie=UTF8&node=3754161" class="nav_a">Kitchen & Bath Fixtures</a></li>
<li class="nav_pop_li "><a href="/Hardware-Locks-and-Fasteners/b?ie=UTF8&node=511228" class="nav_a">Hardware</a></li>
<li class="nav_pop_li "><a href="/Building-Supply-and-Building-Materials/b?ie=UTF8&node=551240" class="nav_a">Building Supplies</a></li>
</ul>
</div>
<div id="nav_subcats_11" class="nav_browse_subcat" data-nav-promo-id="grocery-health-beauty">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Grocery, Health & Beauty</li>
<li class="nav_pop_li "><a href="/grocery-breakfast-foods-snacks-organic/b?ie=UTF8&node=16310101" class="nav_a">Grocery & Gourmet Food</a></li>
<li class="nav_pop_li "><a href="/Natural-Organic-Grocery/b?ie=UTF8&node=51537011" class="nav_a">Natural & Organic</a></li>
<li class="nav_pop_li "><a href="/health-personal-care-nutrition-fitness/b?ie=UTF8&node=3760901" class="nav_a">Health & Personal Care</a></li>
<li class="nav_pop_li "><a href="/beauty-makeup-fragrance-skin-care/b?ie=UTF8&node=3760911" class="nav_a">Beauty</a></li>
</ul>
</div>
<div id="nav_subcats_12" class="nav_browse_subcat" data-nav-promo-id="toys-kids-baby">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Toys, Kids & Baby</li>
<li class="nav_pop_li "><a href="/toys/b?ie=UTF8&node=165793011" class="nav_a">Toys & Games</a></li>
<li class="nav_pop_li "><a href="/baby-car-seats-strollers-bedding/b?ie=UTF8&node=165796011" class="nav_a">Baby</a></li>
<li class="nav_pop_li "><a href="/Kids-Baby-Clothing/b?ie=UTF8&node=1040662" class="nav_a">Clothing (Kids & Baby)</a></li>
<li class="nav_pop_li "><a href="/Kids-Family/b?ie=UTF8&node=471306" class="nav_a">Video Games for Kids</a></li>
</ul>
</div>
<div id="nav_subcats_13" class="nav_browse_subcat" data-nav-promo-id="clothing-shoes-jewelry">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Clothing, Shoes & Jewelry</li>
<li class="nav_pop_li "><a href="/clothing-accessories-men-women-kids/b?ie=UTF8&node=1036592" class="nav_a">Clothing</a></li>
<li class="nav_pop_li "><a href="/shoes-men-women-kids-baby/b?ie=UTF8&node=672123011" class="nav_a">Shoes</a></li>
<li class="nav_pop_li "><a href="/Handbags-Accessories-Clothing/b?ie=UTF8&node=15743631" class="nav_a">Handbags</a></li>
<li class="nav_pop_li "><a href="/Handbags-Designer-Sunglasses-iPod-Case/b?ie=UTF8&node=1036700" class="nav_a">Accessories</a></li>
<li class="nav_pop_li "><a href="/Luggage-Bags-Travel-Accessories-Clothing/b?ie=UTF8&node=15743161" class="nav_a">Luggage</a></li>
<li class="nav_pop_li "><a href="/jewelry-watches-engagement-rings-diamonds/b?ie=UTF8&node=3367581" class="nav_a">Jewelry</a></li>
<li class="nav_pop_li "><a href="/Watches-Mens-Womens-Kids-Accessories/b?ie=UTF8&node=377110011" class="nav_a">Watches</a></li>
</ul>
</div>
<div id="nav_subcats_14" class="nav_browse_subcat" data-nav-promo-id="sports-outdoors">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Sports & Outdoors</li>
<li class="nav_pop_li "><a href="/Exercise-Fitness-Sports-Outdoors/b?ie=UTF8&node=3407731" class="nav_a">Exercise & Fitness</a></li>
<li class="nav_pop_li "><a href="/Outdoor-Recreation/b?ie=UTF8&node=706814011" class="nav_a">Outdoor Recreation</a></li>
<li class="nav_pop_li "><a href="/Apparel/b?ie=UTF8&node=2206626011" class="nav_a">Athletic & Outdoor Clothing</a></li>
<li class="nav_pop_li "><a href="/Team-Sports-Outdoors/b?ie=UTF8&node=706809011" class="nav_a">Team Sports</a></li>
<li class="nav_pop_li "><a href="/Bikes-Scooters/b?ie=UTF8&node=2232464011" class="nav_a">Bikes & Scooters</a></li>
<li class="nav_pop_li "><a href="/Golf-Sports-Outdoors/b?ie=UTF8&node=3410851" class="nav_a">Golf</a></li>
<li class="nav_pop_li "><a href="/Boating-Water-Sports-Outdoors/b?ie=UTF8&node=3421331" class="nav_a">Boating & Water Sports</a></li>
<li class="nav_pop_li "><a href="/Fan-Shop-Sports-Outdoors/b?ie=UTF8&node=3386071" class="nav_a">Fan Shop</a></li>
<li class="nav_pop_li "><a href="/sporting-goods-clothing-cycling-exercise/b?ie=UTF8&node=3375251" class="nav_a">All Sports & Outdoors</a></li>
</ul>
</div>
<div id="nav_subcats_15" class="nav_browse_subcat" data-nav-promo-id="automotive-industrial">
<ul class="nav_browse_ul nav_browse_cat_ul">
<li class="nav_pop_li nav_browse_cat_head">Automotive & Industrial</li>
<li class="nav_pop_li "><a href="/automotive-auto-truck-replacements-parts/b?ie=UTF8&node=15684181" class="nav_a">Automotive Parts & Accessories</a></li>
<li class="nav_pop_li "><a href="/Tools-Equipment-Automotive/b?ie=UTF8&node=15706941" class="nav_a">Automotive Tools & Equipment</a></li>
<li class="nav_pop_li "><a href="/Car-Electronics/b?ie=UTF8&node=1077068" class="nav_a">Car Electronics & GPS</a></li>
<li class="nav_pop_li "><a href="/b?ie=UTF8&node=15706571" class="nav_a">Tires & Wheels</a></li>
<li class="nav_pop_li "><a href="/Motorcycle-ATV-Automotive/b?ie=UTF8&node=346333011" class="nav_a">Motorcycle & ATV</a></li>
<li class="nav_pop_li "><a href="/industrial-scientific-supplies/b?ie=UTF8&node=16310091" class="nav_a">Industrial & Scientific</a></li>
</ul>
</div>
</div>
<div class="nav_subcats_div"></div>
<div class="nav_subcats_div nav_subcats_div2"></div>
</div>
<div id="nav_cats_wrap" class="nav_browse_wrap" >
<ul id="nav_cats" class="nav_browse_ul">
<li id="nav_cat_0" class="nav_pop_li nav_cat">Unlimited Instant Videos</li>
<li id="nav_cat_1" class="nav_pop_li nav_cat">MP3s & Cloud Player<div class="nav_tag">20 million songs, play anywhere</div></li>
<li id="nav_cat_2" class="nav_pop_li nav_cat">Amazon Cloud Drive<div class="nav_tag">5 GB of free storage</div></li>
<li id="nav_cat_3" class="nav_pop_li nav_cat">Kindle</li>
<li id="nav_cat_4" class="nav_pop_li nav_cat">Appstore for Android<div class="nav_tag">Get a premium app for free today<span id="nav_amabotandroid"></span></div></li>
<li id="nav_cat_5" class="nav_pop_li nav_cat">Digital Games & Software</li>
<li id="nav_cat_6" class="nav_pop_li nav_cat">Audible Audiobooks</li>
<li id="nav_cat_7" class="nav_pop_li nav_divider_before nav_cat">Books</li>
<li id="nav_cat_8" class="nav_pop_li nav_cat">Movies, Music & Games</li>
<li id="nav_cat_9" class="nav_pop_li nav_cat">Electronics & Computers</li>
<li id="nav_cat_10" class="nav_pop_li nav_cat">Home, Garden & Tools</li>
<li id="nav_cat_11" class="nav_pop_li nav_cat">Grocery, Health & Beauty</li>
<li id="nav_cat_12" class="nav_pop_li nav_cat">Toys, Kids & Baby</li>
<li id="nav_cat_13" class="nav_pop_li nav_cat">Clothing, Shoes & Jewelry</li>
<li id="nav_cat_14" class="nav_pop_li nav_cat">Sports & Outdoors</li>
<li id="nav_cat_15" class="nav_pop_li nav_cat">Automotive & Industrial</li>
<li id="nav_fullstore" class="nav_pop_li nav_divider_before nav_last_li nav_a_carat">
<span class="nav_a_carat">›</span><a href="/gp/site-directory" class="nav_a">Full Store Directory</a></li>
</ul>
<div id="nav_cat_indicator" class="nav-sprite"></div>
</div>
</div>
<!-- Updated -->
<div id="nav_your_account_flyout"> <ul class="nav_pop_ul">
<li class="nav_pop_li nav_divider_after">
<div><a href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_signin" class="nav-action-button nav-sprite" rel="nofollow">
<span class='nav-action-inner nav-sprite'>Sign in</span>
</a></div>
<div class="nav_pop_new_cust">New customer? <a href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_newcust" rel="nofollow" class="nav_a">Start here.</a></div>
</li>
<li class="nav_pop_li"><a href="https://www.amazon.com/gp/css/homepage.html" class="nav_a">Your Account</a></li>
<li class="nav_pop_li"><a href="https://www.amazon.com/gp/css/order-history" class="nav_a" id="nav_prefetch_yourorders">Your Orders</a></li>
<li class="nav_pop_li"><a href="/gp/registry/wishlist" class="nav_a">Your Wish List</a></li>
<li class="nav_pop_li"><a href="/gp/yourstore" class="nav_a">Your Recommendations</a></li>
<li class="nav_pop_li"><a href="/gp/subscribe-and-save/manager/viewsubscriptions" class="nav_a">Your Subscribe & Save Items</a></li>
<li class="nav_pop_li nav_divider_before"><a href="/gp/digital/fiona/manage" class="nav_a">Manage Your Kindle</a></li>
<li class="nav_pop_li"><a href="/gp/dmusic/mp3/player" class="nav_a">Your Cloud Player</a><div class="nav_tag">Play from any browser</div></li>
<li class="nav_pop_li"><a href="/clouddrive" class="nav_a">Your Cloud Drive</a><div class="nav_tag">5 GB of free storage</div></li>
<li class="nav_pop_li"><a href="/b?ie=UTF8&node=2676882011" class="nav_a">Prime Instant Videos</a><div class="nav_tag">Unlimited streaming of thousands<br />of movies and TV shows</div></li>
<li class="nav_pop_li"><a href="/gp/video/library" class="nav_a">Your Video Library</a></li>
<li class="nav_pop_li"><a href="/gp/swvgdtt/your-account/manage-downloads.html" class="nav_a">Your Games & Software Library</a></li>
<li class="nav_pop_li nav_last_li"><a href="/gp/mas/your-account/myapps" class="nav_a">Your Android Apps & Devices</a></li>
</ul> <!--[if IE ]> <div class='nav-ie-min-width' style='width: 150px'></div> <![endif]--> </div>
<div id="nav_cart_flyout" class="nav-empty">
<ul class='nav_dynamic'></ul>
<div class='nav-ajax-message'></div>
<div class='nav-dynamic-empty'>
<p class='nav_p nav-bold nav-cart-empty'> Your Shopping Cart is empty.</p>
<p class='nav_p '> Give it purpose—fill it with books, DVDs, clothes, electronics, and more.</p>
<p class='nav_p '> If you already have an account, <a href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_signin_cart" class="nav_a">sign in</a>.</p>
</div>
<div class='nav-ajax-error-msg'>
<p class='nav_p nav-bold'> There's a problem previewing your cart right now.</p>
<p class='nav_p '> Check your Internet connection and <a href="/gp/cart/view.html" class="nav_a">go to your cart</a>, or <a href='javascript:void(0);' class='nav_a nav-try-again'>try again</a>.</p>
</div>
<a href="/gp/cart/view.html" id="nav-cart-menu-button" class="nav-action-button nav-sprite"><span class="nav-action-inner nav-sprite">
View Cart
<span class='nav-ajax-success'>
<span id='nav-cart-zero'>(<span class='nav-cart-count'>0</span> items)</span>
<span id='nav-cart-one' style='display: none;'>(<span class='nav-cart-count'>0</span> item)</span>
<span id='nav-cart-many' style='display: none;'>(<span class='nav-cart-count'>0</span> items)</span>
</span>
</span></a>
</div>
<!-- Updated -->
<div id="nav_wishlist_flyout" class="nav-empty">
<div class='nav-ajax-message'></div>
<ul class='nav_dynamic nav_pop_ul nav_divider_after'></ul>
<ul class="nav_pop_ul">
<li class="nav_pop_li nav-dynamic-empty"><a href="/gp/wishlist" class="nav_a">Create a Wish List</a></li>
<li class="nav_pop_li"><a href="/gp/gift-central" class="nav_a">Find a Wish List or Registry</a></li>
<li class="nav_pop_li"><a href="/wishlist/universal" class="nav_a">Wish from Any Website</a><div class="nav_tag">Add items to your List from anywhere</div></li>
<li class="nav_pop_li"><a href="/gp/wedding/homepage" class="nav_a">Wedding Registry</a></li>
<li class="nav_pop_li nav_last_li"><a href="/gp/registry/baby" class="nav_a">Baby Registry</a></li>
</ul>
</div>
<script type='text/html' id='nav-tpl-wishlist'>
<# jQuery.each(wishlist, function (i, item) { #>
<li class='nav_pop_li'>
<a href='<#=item.url #>' class='nav_a'>
<#=item.name #>
</a>
<div class='nav_tag'>
<# if(typeof item.count !='undefined') { #>
<#=
(item.count == 1 ? "{count} item" : "{count} items")
.replace("{count}", item.count)
#>
<# } #>
</div>
</li>
<# }); #>
</script>
<script type='text/html' id='nav-tpl-cart'>
<# jQuery.each(cart, function (i, item) { #>
<li class='nav_cart_item'>
<a href='<#=item.url #>' class='nav_a'>
<img class='nav_cart_img' src='<#=item.img #>'/>
<span class='nav-cart-title'><#=item.name #></span>
<span class='nav-cart-quantity'>
<#= "Quantity: {count}".replace("{count}", item.qty) #>
</span>
</a>
</li>
<# }); #>
</script>
<script type='text/html' id='nav-tpl-asin-promo'>
<a href='<#=destination #>' class='nav_asin_promo'>
<img src='<#=image #>' class='nav_asin_promo_img'/>
<span class='nav_asin_promo_headline'><#=headline #></span>
<span class='nav_asin_promo_info'>
<span class='nav_asin_promo_title'><#=productTitle #></span>
<span class='nav_asin_promo_title2'><#=productTitle2 #></span>
<span class='nav_asin_promo_price'><#=price #></span>
</span>
<span class='nav_asin_promo_button nav-sprite'><#=button #></span>
</a>
</script>
</div>
<script type='text/javascript'>
_navbar.prefetch = function() {
amznJQ.addPL(['http://z-ecx.images-amazon.com/images/G/01/browser-scripts/registriesCSS/US-combined-122013016._V394121533_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/us-site-wide-css-beacon/site-wide-5808467376._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-css-buttons/wcs-css-buttons-3112498172._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-beaconized/wcs-ya-homepage-beaconized-3700890291._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-cn/wcs-ya-homepage-cn-2647797242._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage/wcs-ya-homepage-2954424783._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-order-history-beaconized/wcs-ya-order-history-beaconized-598394915._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-order-history/wcs-ya-order-history-2432905716._V1_.css',
'https://images-na.ssl-images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V394051227_.png',
'https://images-na.ssl-images-amazon.com/images/G/01/gno/images/general/navAmazonLogoFooter._V169459313_.gif',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/css/images/amznbtn-sprite03._V163527511_.png',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/help/images/spotlight/kindle-family-02b._V139448121_.jpg',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/acorn._V192250692_.gif',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/btn-close._V192250694_.gif',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/projects/text-trace/texttrace_typ._V183418138_.js',
'https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/ya/images/shipment_large_lt._V192250661_.gif']);
}
amznJQ.declareAvailable('navbarBTFLite');
amznJQ.declareAvailable('navbarBTF');
</script>
<style type="text/css">
.sign-in-tooltip-beak {
background-image: url("http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/light/sprite-vertical-popover-arrow._V186877868_.png");
overflow: hidden;
display: inline-block;
background-repeat: repeat;
background-attachment: scroll;
background-color: transparent;
background-position: -385px 0px;
height: 16px;
width: 30px;
position: absolute;
left: 92px;
top: -34px;
}
#sign-in-tooltip-anchor-point {
display: none;
font-family: Arial, Verdana, Helvetica, sans-serif;
}
#sign-in-tooltip-body {
display: none;
}
.sign-in-tooltip-new-customer {
color: #333333;
font-size: 11px;
margin-top: 5px;
text-align: center;
}
a.sign-in-tooltip-link {
cursor: pointer;
font-size: 11px;
}
a.sign-in-tooltip-link,
a.sign-in-tooltip-link:link {
color: #004B91;
text-decoration: none;
}
a.sign-in-tooltip-link:active,
a.sign-in-tooltip-link:hover {
color: #E47911;
text-decoration: underline;
}
</style>
<img src="http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/light/sprite-v._V219326283_.png" height="0" width="0" />
<img src="http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/light/sprite-h._V219326280_.png" height="0" width="0" />
<img src="http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/light/sprite-vertical-popover-arrow._V186877868_.png" height="0" width="0" />
<div id="sign-in-tooltip-anchor-point">
<div class="sign-in-tooltip-beak"> </div>
<div id="sign-in-tooltip-body">
<a class="nav-action-button nav-sprite" href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_custrec_signin">
<span class="nav-action-inner nav-sprite">Sign in</span>
</a>
<div class="sign-in-tooltip-new-customer">
New customer? <a class="sign-in-tooltip-link" href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_custrec_newcust">Start here.</a>
</div>
</div>
</div>
<script type="text/javascript">
amznJQ.onReady('jQuery', function () {
var popoverContainer;
var signInPopover;
var tooltipTimer;
var signInPopoverOptions = {
'align': "center",
'closeEventInclude': "CLICK_OUTSIDE",
'forceAlignment': true,
'location': 'bottom',
'localContent': "#sign-in-tooltip-anchor-point",
'locationElement': "#nav-your-account",
'locationMargin': 8,
'paddingBottom': 0,
'paddingLeft': 20,
'paddingRight': 20,
'showCloseButton': true,
'showOnHover': false,
'onHide': function () { signInPopover = undefined; },
'onShow' : function () { jQuery("#sign-in-tooltip-body").fadeIn(1000);
tooltipTimer = constructTooltipTimer(); },
'width': 250,
'zIndex': 210
};
var dismissPopover = function (popover) {
if (popover != undefined) {
popover.close();
}
};
// Constructs the tooltip and sets necessary variables
var constructTooltip = function () {
signInPopover = jQuery.AmazonPopover.displayPopover(signInPopoverOptions);
popoverContainer = jQuery("#sign-in-tooltip-anchor-point").parents(".ap_popover");
// If customer hovers over popover, prevent it from dismissing itself
// Upon hovering off, reset the timer
if (popoverContainer) {
popoverContainer.hover(
function () {
clearTimeout(tooltipTimer);
},
function () {
tooltipTimer = constructTooltipTimer();
}
);
}
// Dismiss tooltip if window is resized, due to bug
jQuery(window).resize(function (eventObject) {
dismissPopover(signInPopover);
});
};
// Constructs a timer to dismiss the tooltip
var constructTooltipTimer = function () {
return setTimeout(function () {
if (signInPopover != undefined) {
if (popoverContainer &&
!(jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 9)) {
popoverContainer.fadeOut(1000,
function () {
dismissPopover(signInPopover);
});
} else {
dismissPopover(signInPopover);
}
}
},
10000);
};
amznJQ.onReady('popover', function () {
var dismissed = false;
amznJQ.available('navDismissTooltip', function () {
// Event fired by Nav flyouts
dismissed = true;
dismissPopover(signInPopover);
});
// Check if any Nav flyouts are already displaying before initial render
if (!dismissed) {
constructTooltip();
}
});
});
</script>
<div id="centerB" class="">
<div id="gwcswB" class="gwcswWrap">
<div class="gwcswNav">
</div>
<div class="gwcswSlots">
<div class="gwcswSlot" style="display:block;">
<div style="display:none;"></div><div style="display:none;" id="title">Clothing Trends</div><div style="display:none;" id="hover">Fall's New Shape</div><table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td><map name="aa-clo_bb_women_trend_a"><area shape="rect" coords="536,0,1,180" alt="Fall's New Shape" href="/l/1040660?_encoding=UTF8&nav_sdd=aps"/> <area shape="rect" coords="536,141,660,0" alt="View Looks" href="/l/5638716011?_encoding=UTF8&nav_sdd=aps"/> <area shape="rect" coords="536,141,660,180" alt="The Amazon Clothing Store" href="/l/1036592?_encoding=UTF8&nav_sdd=aps"/> </map><img onload="if (typeof uet == 'function') {uet('xb'); }" src="http://g-ecx.images-amazon.com/images/G/01/img12/APPAREL/GATEWAY/BUNK_BEDS/BTS2/BB_womens2b._V394050447_.jpg" width="660" usemap="#aa-clo_bb_women_trend_a" alt="White Hot Denim" height="180" border="0" /></td></tr></table>
</div>
</div>
</div>
<style type="text/css">
.gwcswWrap
{
position: relative;
overflow: hidden;
text-align: center;
}
.gwcswWrap .gwcswNav .gwcswNavWrap
{
visibility: hidden;
}
.gwcswWrap table
{
border-collapse: collapse;
margin: auto;
}
.gwcswWrap .gwcswNav table tr td
{
height: 33px;
padding: 0 10px;
vertical-align: middle;
white-space: nowrap;
color: #555;
cursor: pointer;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
}
.gwcswWrap .gwcswNav table tr td .gwcswTitle
{
font-family: arial,verdana,helvetica,sans-serif;
font-size: 11px;
line-height: 11px;
font-weight: bold;
white-space: nowrap;
background-color: #ffffff;
}
.gwcswWrap .gwcswNav table tr td.hover
{
color: #121212;
}
.gwcswWrap .gwcswNav table tr td.selected
{
color: #E47911;
cursor: default;
}
.gwcswWrap .gwcswNav table tr td:first-child
{
padding-left: 0;
}
.gwcswWrap .gwcswNav table tr td:last-child
{
padding-right: 0;
}
.gwcswWrap .gwcswNotch
{
display: none;
position: absolute;
width: 294px;
height: 10px;
filter: inherit;
}
.gwcswWrap .gwcswNotch img
{
width: 294px;
height: 10px;
background-color: transparent;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)";
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
zoom: 1;
}
.gwcswWrap .gwcswSlots
{
z-index: -1;
}
.gwcswWrap .gwcswSlots .gwcswSlot
{
display: none;
}
#gwcswTooltip
{
visibility: hidden;
position: absolute;
top:0px;
left:0px;
padding: 6px 10px;
color: #ffffff;
background: rgb(0,0,0) transparent;
background: rgba(0,0,0,0.65);
text-align: center;
font-size: 11px;
line-height: 11px;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px 4px 4px 4px;
z-index: 300;
}
#gwcswTooltip #text
{
font-family: arial,verdana,helvetica,sans-serif;
white-space: nowrap;
}
#gwcswTriDown
{
visibility: hidden;
position:absolute;
width: 13px;
height: 7px;
}
#gwcswTriDown img
{
width: 13px;
height: 7px;
}
</style>
<!--[if lte IE 8]>
<style type="text/css">
#gwcswTooltip
{
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#A6000000, endColorstr=#A6000000);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#A6000000, endColorstr=#A6000000)";
}
</style>
<![endif]-->
<script type='text/javascript'>
var GWCSW=new Object();GWCSW.c_animationDelay=200;GWCSW.tabClicked=false;GWCSW.isLazy;GWCSW.ueBegin;GWCSW.ueFirstClick;GWCSW.uePublish=function(b){var a=+new Date;if(typeof(uet)!="function"||typeof(GWCSW.ueBegin)==="undefined"||typeof(GWCSW.ueFirstClick)==="undefined"){return}ues("t",b,{})["bb"]=GWCSW.ueBegin;ues("wb",b,1);ues("t",b)["af"]=GWCSW.ueFirstClick;uex("ld",b)};GWCSW.launch=function(h,d,f,g){var b=false;var a=false;var e=jQuery("#gwcswA");var c=jQuery("#gwcswB");if(e.length===1){var b=e.initGWCSW(h.slotsA,d,f,g)}if(c.length===1){var a=c.initGWCSW(h.slotsB,d,f,g)}if(b){jQuery("#gwcswA").showNav()}if(a){jQuery("#gwcswB").showNav()}if(typeof uet=="function"){uet("xJ")}};amznJQ.available("jQuery",function(){GWCSW.isIE6=function(){return(jQuery.browser.msie&&jQuery.browser.version==="6.0")};GWCSW.isIE7=function(){return(jQuery.browser.msie&&jQuery.browser.version==="7.0")};GWCSW.isIE8=function(){return(jQuery.browser.msie&&jQuery.browser.version==="8.0")};jQuery.fn.initGWCSW=function(o,z,A,E){var l=jQuery(this);var D=l.find(".gwcswSlots");jQuery("<div>").addClass("gwcswNavWrap").append(jQuery("<table>").append(jQuery("<tbody>").append(jQuery("<tr>")))).appendTo(l.find(".gwcswNav"));var a=l.find(".gwcswNavWrap");var c=a.find("table tbody tr");jQuery("<div>").addClass("gwcswNotch").html(jQuery("<img>").attr("src",z)).appendTo(l);var k=l.find(".gwcswNotch");var m=o.length+1;var I=[];var x=[];var u=false;var e;var K;var H=Math.floor((m-1)/2);var w=D.find(".gwcswSlot");w.attr("index",H);if(typeof GWCSW.isLazy==="undefined"){GWCSW.isLazy=!(typeof window.isLd==="undefined"||window.isLd)}for(i=0;i<m;i++){I[i]={};if(i==H){I[i].title=J("title",w);I[i].tooltip=J("hover",w);I[i].loading=true;I[i].loaded=true;I[i].uePublish=false;if(typeof(I[i].title)==="undefined"){return false}}else{var f;if(i<H){f=o[i]}else{f=o[i-1]}I[i].callback=f.slot.callback;var y=f.slot.content;x[i]={};I[i].aImgSrc=[];I[i].uePublish=false;x[i].total=f.slot.imgs.length;x[i].unloaded=f.slot.imgs.length;for(var v=0;v<x[i].total;v++){I[i].aImgSrc[v]=f.slot.imgs[v]}var r=jQuery("<div>").addClass("gwcswSlot").attr("index",i);r.html(y);I[i].title=J("title",r);I[i].tooltip=J("hover",r);if(typeof(I[i].title)==="undefined"){I[i].loaded=true;continue}I[i].slot=r;r.css("visibility","hidden");r.wrap('<div class="gwcswSlotWrap" />');r.parent().css("background-image",'url("'+A+'")');r.parent().css("background-position","center");r.parent().css("background-repeat","no-repeat");var t=r.find("img");I[i].aImgs=[];t.each(function(M,L){if(GWCSW.isLazy){jQuery(L).attr("src","")}I[i].aImgs[M]=jQuery(L)});if(!GWCSW.isLazy){p(i)}I[i].loaded=false;I[i].loading=!GWCSW.isLazy;r.parent().appendTo(D)}if(I[i].title.indexOf("Appstore")!==-1&&I[i].title.indexOf("Android")!==-1){if(typeof(_navbar)!=="undefined"&&typeof(_navbar.amabotandroid)!=="undefined"&&_navbar.amabotandroid){I[i].tooltip=_navbar.amabotandroid}}I[i].title=I[i].title.replace(/<br>/gi,"<br>");if(typeof(I[i].tooltip)!=="undefined"){I[i].tooltip=I[i].tooltip.replace(/<br>/gi,"<br>")}var b=jQuery("<td>").attr("index",i);b.append(jQuery("<div>").addClass("gwcswTitle").html(I[i].title));c.append(b);if(GWCSW.isIE6()){if(i===0){b.css("padding-left","0px")}else{if(i===m-1){b.css("padding-right","0px")}}}}if(GWCSW.isLazy){jQuery(window).load(q)}var C=c.find('[index="'+H+'"]');C.addClass("selected");j(C,0);e=jQuery("#gwcswTooltip");if(e.length==0){e=jQuery("<div>").attr("id","gwcswTooltip");e.append(jQuery("<div>").attr("id","text"));e.appendTo(jQuery("body"))}K=jQuery("#gwcswTriDown");if(K.length==0){K=jQuery("<div>").attr("id","gwcswTriDown");K.append(jQuery("<img>").attr("src",E))}K.appendTo(jQuery("body"));c.find("td").each(function(){jQuery(this).bind("mouseenter",[true],F).bind("mouseleave",[false],F);jQuery(this).click(s)});return true;function F(L){var n=jQuery(this);n.toggleClass("hover");if(L.data[0]){window.setTimeout(function(){d()},250)}else{h()}}function q(){for(i=0;i<m;i++){p(i)}}function p(M){if((GWCSW.isLazy&&I[M].loading)||I[M].loaded){return}I[M].loading=true;var L=[];for(var N=0;N<x[M].total;N++){L[N]=new Image();L[N].onload=function(){x[M].unloaded--;if(x[M].unloaded===0){if(I[M].uePublish){GWCSW.uePublish("gwcsw2")}B(M)}};if(GWCSW.isLazy){I[M].aImgs[N].attr("src",I[M].aImgSrc[N])}L[N].src=I[M].aImgSrc[N]}}function B(n){I[n].slot.css("visibility","visible");I[n].slot.parent().css("background-image","");I[n].loaded=true}function s(){if(u){return}u=true;var N=c.find("td.selected");var L=N.attr("index");var M=jQuery(this).attr("index");if(L==M){u=false;return}var n=false;if(!GWCSW.tabClicked){GWCSW.tabClicked=true;n=true;GWCSW.ueFirstClick=+new Date}if(!I[M].loading){p(M)}h();N.removeClass("selected");jQuery(this).addClass("selected");G(L,M,n);j(jQuery(this),GWCSW.c_animationDelay);if(typeof(I[M].callback)!=="undefined"&&I[M].callback&&typeof(I[M].callbackLog)==="undefined"){I[M].callbackLog=1;jQuery.get(I[M].callback)}}function G(M,N,L){var n=D.find("[index="+M+"]");var O=D.find("[index="+N+"]");n.fadeOut(GWCSW.c_animationDelay,function(){if(L){g(N)}O.fadeIn(GWCSW.c_animationDelay,function(){u=false})})}function g(n){if(I[n].loaded){GWCSW.uePublish("gwcsw1");return}I[n].uePublish=true}function j(N,n){var M=N.position();var L=M.top+N.outerHeight();var O=M.left+N.width()/2+Number(N.css("padding-left").replace("px",""))-k.width()/2;if(n==0){k.css({left:O,top:L})}else{k.animate({left:O,top:L},n)}}function d(){var N=c.find("td.hover");if(N.length!==1||N.hasClass("selected")){return}var R=I[Number(N.attr("index"))].tooltip;if(typeof(R)!=="undefined"&&R){e.find("#text").html(R);var n=N.offset();var P=N.find(".gwcswTitle").offset();var M=P.top-e.outerHeight()-K.height();var Q=n.left+N.width()/2+Number(N.css("padding-left").replace("px",""))-e.outerWidth()/2;var L=Q+e.outerWidth()/2-K.outerWidth()/2;var O=M+e.outerHeight();if(GWCSW.isIE6()){K.find("img").applyIEPngFix()}e.css({left:Q,top:M});K.css({left:L,top:O});e.css("visibility","visible");K.css("visibility","visible")}}function h(){e.css("visibility","hidden");K.css("visibility","hidden")}function J(M,n){var L=n.find("#"+M);if(L.length!==1){return}return L.html()}};jQuery.fn.showNav=function(){var b=jQuery(this).find(".gwcswNotch");var a=jQuery(this).find(".gwcswNav .gwcswNavWrap");a.css("display","none");a.css("visibility","visible");if(GWCSW.isIE6()){jQuery(this).find(".gwcswNotch img").applyIEPngFix()}if(this.attr("id")==="gwcswA"){GWCSW.ueBegin=+new Date}a.fadeIn(GWCSW.c_animationDelay,function(){if(GWCSW.isIE7()||GWCSW.isIE8()){this.style.removeAttribute("filter")}});b.fadeIn(GWCSW.c_animationDelay)};jQuery.fn.applyIEPngFix=function(){var a=jQuery(this).parent();a.html(jQuery("<span title></span>").attr("style","width:"+jQuery(this).css("width")+";height:"+jQuery(this).css("height")+";display:inline-block;;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+jQuery(this).attr("src")+"', sizingMethod='image');"))}});amznJQ.declareAvailable("gateway-center-stage");
</script>
</div>
<div class="amabot_center" id="centercol">
<link rel="stylesheet" type="text/css" href="http://z-ecx.images-amazon.com/images/G/01/s9-campaigns/s9-widget._V143214364_.css"/><div class="unified_widget rcm widget small_heading s9Widget" id="ns_0MSRC4HCMZGT5XEGM66M_610_Widget">
<script type="text/javascript">
window.S9Includes = window.S9Includes || {};
if (!window.S9Includes.S9Multipack && !window.S9Multipack) {
var scriptElem = document.createElement('script');
scriptElem.src = "http://z-ecx.images-amazon.com/images/G/01/s9-campaigns/s9-multipack-min._V154344867_.js";
document.getElementsByTagName('head')[0].appendChild(scriptElem);
}
window.S9Includes['S9Multipack'] = true;
</script>
<h2>What Other Customers Are Looking At Right Now</h2>
<div class="row s9m3" id="ns_0MSRC4HCMZGT5XEGM66M_610_r0ItemRow">
<div class="s9OtherItems" style="float: left; width: 100%">
<div class="fluid asin s9a0" style="float: left; width: 33.1%">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B0084IG7KC" class="title ntTitle noLinkDecoration" title="The Hunger Games [2-Disc Blu-ray + Ultra-Violet Digital Copy]"><div class="imageContainer"><img src="http://ecx.images-amazon.com/images/I/51ZNsLOdCxL._SL135_.jpg" alt="" width="115" height="135" /></div><span class="s9TitleText">The Hunger Games
</span></a>
<div class="t11">Jennifer Lawrence, Josh Hutcherson, ...</div><div class="gry t11 nt">Blu-ray</div>
<span class="newListprice gry t11">$39.99</span> <span class="s9Price red t14">$19.99</span>
</div></div>
</div>
<div class="fluid asin s9a1" style="float: left; width: 33.1%">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B008AWELQY" class="title ntTitle noLinkDecoration" title="Monster Shooter: The Lost Levels"><div class="imageContainer"><img src="http://ecx.images-amazon.com/images/I/81VHY1Y48hL._SL135_.png" alt="" width="135" height="135" /></div><span class="s9TitleText">Monster Shooter: The Lost Levels
</span></a>
<br clear="none"/><div class="t11">Gamelion Studios</div>
<span class="newListprice gry t11">$0.99</span> <span class="s9Price red t14">$0.00</span>
</div></div>
</div>
<div class="fluid asin s9a2" style="float: left; width: 33.1%">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B0051QVESA" class="title ntTitle noLinkDecoration" title="Kindle, Wi-Fi, 6" E Ink Display - includes Special Offers & Sponsored Screensavers"><div class="imageContainer"><img src="http://ecx.images-amazon.com/images/I/411H%2B731ZzL._SL135_.jpg" alt="" width="135" height="135" /></div><span class="s9TitleText">Kindle, Wi-Fi, 6" E Ink Display...
</span></a>
<br clear="none"/><div class="t11">Amazon</div>
<span class="s9Price red t14">$79.00</span>
</div></div>
</div>
<div class="fluid asin s9a3" style="float: left; width: 33.1%; display: none">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B005890G8Y" class="title ntTitle noLinkDecoration" title="Kindle Touch, Wi-Fi, 6" E Ink Display - includes Special Offers & Sponsored Screensavers"><div class="imageContainer"><img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif" url="http://ecx.images-amazon.com/images/I/417j8GAjnyL._SL135_.jpg" alt="" width="135" height="135" /></div><span class="s9TitleText">Kindle Touch, Wi-Fi, 6" E Ink Display...
</span></a>
<br clear="none"/><div class="t11">Amazon</div>
<span class="s9Price red t14">$99.00</span>
</div></div>
</div>
<div class="fluid asin s9a4" style="float: left; width: 33.1%; display: none">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B003VNKNF0" class="title ntTitle noLinkDecoration" title="Transcend 32 GB Class 10 SDHC Flash Memory Card (TS32GSDHC10E)"><div class="imageContainer"><img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif" url="http://ecx.images-amazon.com/images/I/41IjBjZUO3L._SL135_.jpg" alt="" width="106" height="135" /></div><span class="s9TitleText">Transcend 32 GB Class 10 SDHC Flash...
</span></a>
<br clear="none"/>
<span class="newListprice gry t11">$31.99</span> <span class="s9Price red t14">$17.99</span>
</div></div>
</div>
<div class="fluid asin s9a5" style="float: left; width: 33.1%; display: none">
<div class="inner"><div class="s9hl" style="position: relative"><a href="/gp/product/B001KVZ6HK" class="title ntTitle noLinkDecoration" title="Marvel's The Avengers (Four-Disc Combo: Blu-ray 3D/Blu-ray/DVD + Digital Copy + Digital Music Download)"><div class="imageContainer"><img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V192234675_.gif" url="http://ecx.images-amazon.com/images/I/610OqlIOBVL._SL135_.jpg" alt="" width="106" height="135" /></div><span class="s9TitleText">Marvel's The Avengers
</span></a>
<div class="t11">Robert Downey Jr., Chris Evans, ...</div><div class="gry t11 n
gitextract_f_ghewj2/ ├── 2022.go ├── AUTHORS ├── LICENSE ├── README.md ├── detector.go ├── detector_test.go ├── example_test.go ├── icu-license.html ├── multi_byte.go ├── recognizer.go ├── single_byte.go ├── testdata/ │ ├── 8859_1_da.html │ ├── 8859_1_de.html │ ├── 8859_1_en.html │ ├── 8859_1_es.html │ ├── 8859_1_fr.html │ ├── 8859_1_pt.html │ ├── big5.html │ ├── euc_jp.html │ ├── euc_kr.html │ ├── gb18030.html │ ├── shift_jis.html │ ├── utf8.html │ └── utf8_bom.html ├── unicode.go └── utf8.go
SYMBOL INDEX (103 symbols across 9 files)
FILE: 2022.go
type recognizer2022 (line 7) | type recognizer2022 struct
method Match (line 12) | func (r *recognizer2022) Match(input *recognizerInput) (output recogni...
method matchConfidence (line 19) | func (r *recognizer2022) matchConfidence(input []byte) int {
function newRecognizer_2022JP (line 83) | func newRecognizer_2022JP() *recognizer2022 {
function newRecognizer_2022KR (line 90) | func newRecognizer_2022KR() *recognizer2022 {
function newRecognizer_2022CN (line 97) | func newRecognizer_2022CN() *recognizer2022 {
FILE: detector.go
type Result (line 10) | type Result struct
type Detector (line 20) | type Detector struct
method DetectBest (line 87) | func (d *Detector) DetectBest(b []byte) (r *Result, err error) {
method DetectAll (line 96) | func (d *Detector) DetectAll(b []byte) ([]Result, error) {
function NewTextDetector (line 73) | func NewTextDetector() *Detector {
function NewHtmlDetector (line 78) | func NewHtmlDetector() *Detector {
function matchHelper (line 128) | func matchHelper(r recognizer, input *recognizerInput, outputChan chan<-...
type recognizerOutputs (line 132) | type recognizerOutputs
method Len (line 134) | func (r recognizerOutputs) Len() int { return len(r) }
method Less (line 135) | func (r recognizerOutputs) Less(i, j int) bool { return r[i].Confidenc...
method Swap (line 136) | func (r recognizerOutputs) Swap(i, j int) { r[i], r[j] = r[j], r[...
FILE: detector_test.go
function TestDetector (line 11) | func TestDetector(t *testing.T) {
FILE: example_test.go
function ExampleTextDetector (line 16) | func ExampleTextDetector() {
FILE: multi_byte.go
type recognizerMultiByte (line 8) | type recognizerMultiByte struct
method Match (line 19) | func (r *recognizerMultiByte) Match(input *recognizerInput) (output re...
method matchConfidence (line 27) | func (r *recognizerMultiByte) matchConfidence(input *recognizerInput) ...
type charDecoder (line 15) | type charDecoder interface
function binarySearch (line 79) | func binarySearch(l []uint16, c uint16) bool {
type charDecoder_sjis (line 98) | type charDecoder_sjis struct
method DecodeOneChar (line 101) | func (charDecoder_sjis) DecodeOneChar(input []byte) (c uint16, remain ...
function newRecognizer_sjis (line 133) | func newRecognizer_sjis() *recognizerMultiByte {
type charDecoder_euc (line 142) | type charDecoder_euc struct
method DecodeOneChar (line 145) | func (charDecoder_euc) DecodeOneChar(input []byte) (c uint16, remain [...
function newRecognizer_euc_jp (line 213) | func newRecognizer_euc_jp() *recognizerMultiByte {
function newRecognizer_euc_kr (line 222) | func newRecognizer_euc_kr() *recognizerMultiByte {
type charDecoder_big5 (line 231) | type charDecoder_big5 struct
method DecodeOneChar (line 234) | func (charDecoder_big5) DecodeOneChar(input []byte) (c uint16, remain ...
function newRecognizer_big5 (line 269) | func newRecognizer_big5() *recognizerMultiByte {
type charDecoder_gb_18030 (line 278) | type charDecoder_gb_18030 struct
method DecodeOneChar (line 281) | func (charDecoder_gb_18030) DecodeOneChar(input []byte) (c uint16, rem...
function newRecognizer_gb_18030 (line 338) | func newRecognizer_gb_18030() *recognizerMultiByte {
FILE: recognizer.go
type recognizer (line 3) | type recognizer interface
type recognizerOutput (line 7) | type recognizerOutput
type recognizerInput (line 9) | type recognizerInput struct
function newRecognizerInput (line 17) | func newRecognizerInput(raw []byte, stripTag bool) *recognizerInput {
function mayStripInput (line 29) | func mayStripInput(raw []byte, stripTag bool) (out []byte, stripped bool) {
function computeByteStats (line 68) | func computeByteStats(input []byte) []int {
function computeHasC1Bytes (line 76) | func computeHasC1Bytes(byteStats []int) bool {
FILE: single_byte.go
type recognizerSingleByte (line 4) | type recognizerSingleByte struct
method Match (line 12) | func (r *recognizerSingleByte) Match(input *recognizerInput) recognize...
method parseNgram (line 90) | func (r *recognizerSingleByte) parseNgram(input []byte) int {
type ngramState (line 24) | type ngramState struct
method AddByte (line 41) | func (s *ngramState) AddByte(b byte) {
method HitRate (line 54) | func (s *ngramState) HitRate() float32 {
method lookup (line 61) | func (s *ngramState) lookup() bool {
function newNgramState (line 31) | func newNgramState(table *[64]uint32) *ngramState {
function newRecognizer_8859_1 (line 211) | func newRecognizer_8859_1(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_1_en (line 221) | func newRecognizer_8859_1_en() *recognizerSingleByte {
function newRecognizer_8859_1_da (line 224) | func newRecognizer_8859_1_da() *recognizerSingleByte {
function newRecognizer_8859_1_de (line 227) | func newRecognizer_8859_1_de() *recognizerSingleByte {
function newRecognizer_8859_1_es (line 230) | func newRecognizer_8859_1_es() *recognizerSingleByte {
function newRecognizer_8859_1_fr (line 233) | func newRecognizer_8859_1_fr() *recognizerSingleByte {
function newRecognizer_8859_1_it (line 236) | func newRecognizer_8859_1_it() *recognizerSingleByte {
function newRecognizer_8859_1_nl (line 239) | func newRecognizer_8859_1_nl() *recognizerSingleByte {
function newRecognizer_8859_1_no (line 242) | func newRecognizer_8859_1_no() *recognizerSingleByte {
function newRecognizer_8859_1_pt (line 245) | func newRecognizer_8859_1_pt() *recognizerSingleByte {
function newRecognizer_8859_1_sv (line 248) | func newRecognizer_8859_1_sv() *recognizerSingleByte {
function newRecognizer_8859_2 (line 315) | func newRecognizer_8859_2(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_2_cs (line 325) | func newRecognizer_8859_2_cs() *recognizerSingleByte {
function newRecognizer_8859_2_hu (line 328) | func newRecognizer_8859_2_hu() *recognizerSingleByte {
function newRecognizer_8859_2_pl (line 331) | func newRecognizer_8859_2_pl() *recognizerSingleByte {
function newRecognizer_8859_2_ro (line 334) | func newRecognizer_8859_2_ro() *recognizerSingleByte {
function newRecognizer_8859_5 (line 380) | func newRecognizer_8859_5(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_5_ru (line 389) | func newRecognizer_8859_5_ru() *recognizerSingleByte {
function newRecognizer_8859_6 (line 435) | func newRecognizer_8859_6(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_6_ar (line 444) | func newRecognizer_8859_6_ar() *recognizerSingleByte {
function newRecognizer_8859_7 (line 490) | func newRecognizer_8859_7(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_7_el (line 500) | func newRecognizer_8859_7_el() *recognizerSingleByte {
function newRecognizer_8859_8 (line 553) | func newRecognizer_8859_8(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_8_I_he (line 563) | func newRecognizer_8859_8_I_he() *recognizerSingleByte {
function newRecognizer_8859_8_he (line 569) | func newRecognizer_8859_8_he() *recognizerSingleByte {
function newRecognizer_8859_9 (line 615) | func newRecognizer_8859_9(language string, ngram *[64]uint32) *recognize...
function newRecognizer_8859_9_tr (line 625) | func newRecognizer_8859_9_tr() *recognizerSingleByte {
function newRecognizer_windows_1256 (line 671) | func newRecognizer_windows_1256() *recognizerSingleByte {
function newRecognizer_windows_1251 (line 722) | func newRecognizer_windows_1251() *recognizerSingleByte {
function newRecognizer_KOI8_R (line 773) | func newRecognizer_KOI8_R() *recognizerSingleByte {
function newRecognizer_IBM424_he (line 816) | func newRecognizer_IBM424_he(charset string, ngram *[64]uint32) *recogni...
function newRecognizer_IBM424_he_rtl (line 825) | func newRecognizer_IBM424_he_rtl() *recognizerSingleByte {
function newRecognizer_IBM424_he_ltr (line 829) | func newRecognizer_IBM424_he_ltr() *recognizerSingleByte {
function newRecognizer_IBM420_ar (line 867) | func newRecognizer_IBM420_ar(charset string, ngram *[64]uint32) *recogni...
function newRecognizer_IBM420_ar_rtl (line 876) | func newRecognizer_IBM420_ar_rtl() *recognizerSingleByte {
function newRecognizer_IBM420_ar_ltr (line 880) | func newRecognizer_IBM420_ar_ltr() *recognizerSingleByte {
FILE: unicode.go
type recognizerUtf16be (line 14) | type recognizerUtf16be struct
method Match (line 21) | func (*recognizerUtf16be) Match(input *recognizerInput) (output recogn...
function newRecognizer_utf16be (line 17) | func newRecognizer_utf16be() *recognizerUtf16be {
type recognizerUtf16le (line 31) | type recognizerUtf16le struct
method Match (line 38) | func (*recognizerUtf16le) Match(input *recognizerInput) (output recogn...
function newRecognizer_utf16le (line 34) | func newRecognizer_utf16le() *recognizerUtf16le {
type recognizerUtf32 (line 48) | type recognizerUtf32 struct
method Match (line 78) | func (r *recognizerUtf32) Match(input *recognizerInput) (output recogn...
function decodeUtf32be (line 54) | func decodeUtf32be(input []byte) uint32 {
function decodeUtf32le (line 58) | func decodeUtf32le(input []byte) uint32 {
function newRecognizer_utf32be (line 62) | func newRecognizer_utf32be() *recognizerUtf32 {
function newRecognizer_utf32le (line 70) | func newRecognizer_utf32le() *recognizerUtf32 {
FILE: utf8.go
type recognizerUtf8 (line 9) | type recognizerUtf8 struct
method Match (line 16) | func (*recognizerUtf8) Match(input *recognizerInput) (output recognize...
function newRecognizer_utf8 (line 12) | func newRecognizer_utf8() *recognizerUtf8 {
Condensed preview — 26 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,297K chars).
[
{
"path": "2022.go",
"chars": 2277,
"preview": "package chardet\n\nimport (\n\t\"bytes\"\n)\n\ntype recognizer2022 struct {\n\tcharset string\n\tescapes [][]byte\n}\n\nfunc (r *recogni"
},
{
"path": "AUTHORS",
"chars": 45,
"preview": "Sheng Yu (yusheng dot sjtu at gmail dot com)\n"
},
{
"path": "LICENSE",
"chars": 1174,
"preview": "Copyright (c) 2012 chardet Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis"
},
{
"path": "README.md",
"chars": 353,
"preview": "# chardet\n\nchardet is library to automatically detect\n[charset](http://en.wikipedia.org/wiki/Character_encoding) of text"
},
{
"path": "detector.go",
"chars": 3667,
"preview": "// Package chardet ports character set detection from ICU.\npackage chardet\n\nimport (\n\t\"errors\"\n\t\"sort\"\n)\n\n// Result cont"
},
{
"path": "detector_test.go",
"chars": 1574,
"preview": "package chardet_test\n\nimport (\n\t\"github.com/saintfish/chardet\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestDetec"
},
{
"path": "example_test.go",
"chars": 750,
"preview": "package chardet_test\n\nimport (\n\t\"fmt\"\n\t\"github.com/saintfish/chardet\"\n)\n\nvar (\n\tzh_gb18030_text = []byte{\n\t\t71, 111, 202"
},
{
"path": "icu-license.html",
"chars": 1981,
"preview": "<html>\n\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\"></meta>\n<title>ICU License - ICU 1."
},
{
"path": "multi_byte.go",
"chars": 9535,
"preview": "package chardet\n\nimport (\n\t\"errors\"\n\t\"math\"\n)\n\ntype recognizerMultiByte struct {\n\tcharset string\n\tlanguage string"
},
{
"path": "recognizer.go",
"chars": 1631,
"preview": "package chardet\n\ntype recognizer interface {\n\tMatch(*recognizerInput) recognizerOutput\n}\n\ntype recognizerOutput Result\n\n"
},
{
"path": "single_byte.go",
"chars": 45940,
"preview": "package chardet\n\n// Recognizer for single byte charset family\ntype recognizerSingleByte struct {\n\tcharset strin"
},
{
"path": "testdata/8859_1_da.html",
"chars": 23297,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
},
{
"path": "testdata/8859_1_de.html",
"chars": 15184,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n<meta content='infopark.de' name='author'>\n<meta content='width=device-width, minimum-scal"
},
{
"path": "testdata/8859_1_en.html",
"chars": 115643,
"preview": "\n\n\n\n\n\n\n\n\n\n \n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n \"http://www.w3.org/TR/html4/loose.dtd\">\n\n"
},
{
"path": "testdata/8859_1_es.html",
"chars": 72657,
"preview": "\n<!DOCTYPE html>\n<!--[if lt IE 7 ]><html lang=\"es\" class=\"ie6\"><![endif]-->\n<!--[if IE 7 ]> <html lang=\"es\" class=\"ie7\">"
},
{
"path": "testdata/8859_1_fr.html",
"chars": 26732,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"> \n\n\n\n\n\n\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
{
"path": "testdata/8859_1_pt.html",
"chars": 147017,
"preview": "\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional."
},
{
"path": "testdata/big5.html",
"chars": 42193,
"preview": "<!-- Vignette V/5 Sat Dec 03 16:48:18 2005 -->\n \r\n<!--body start-->\r\n\r\n\t<script>\r\nvar strHostname=String(window.location"
},
{
"path": "testdata/euc_jp.html",
"chars": 187751,
"preview": "<!DOCTYPE html>\r\n<html lang=\"ja\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:og=\"http://ogp.me/ns#\" xmlns:fb=\"http://www."
},
{
"path": "testdata/euc_kr.html",
"chars": 67095,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
},
{
"path": "testdata/gb18030.html",
"chars": 9217,
"preview": "<!doctype html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=gb2312\"><title>ٶһ£֪ </title><"
},
{
"path": "testdata/shift_jis.html",
"chars": 12858,
"preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"t"
},
{
"path": "testdata/utf8.html",
"chars": 210541,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
},
{
"path": "testdata/utf8_bom.html",
"chars": 210542,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
},
{
"path": "unicode.go",
"chars": 2290,
"preview": "package chardet\n\nimport (\n\t\"bytes\"\n)\n\nvar (\n\tutf16beBom = []byte{0xFE, 0xFF}\n\tutf16leBom = []byte{0xFF, 0xFE}\n\tutf32beBo"
},
{
"path": "utf8.go",
"chars": 1373,
"preview": "package chardet\n\nimport (\n\t\"bytes\"\n)\n\nvar utf8Bom = []byte{0xEF, 0xBB, 0xBF}\n\ntype recognizerUtf8 struct {\n}\n\nfunc newRe"
}
]
About this extraction
This page contains the full source code of the saintfish/chardet GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 26 files (1.2 MB), approximately 421.1k tokens, and a symbol index with 103 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.