1 |
// Jericho HTML Parser - Java based library for analysing and manipulating HTML
|
2 |
// Version 3.2
|
3 |
// Copyright (C) 2004-2009 Martin Jericho
|
4 |
// http://jericho.htmlparser.net/
|
5 |
//
|
6 |
// This library is free software; you can redistribute it and/or
|
7 |
// modify it under the terms of either one of the following licences:
|
8 |
//
|
9 |
// 1. The Eclipse Public License (EPL) version 1.0,
|
10 |
// included in this distribution in the file licence-epl-1.0.html
|
11 |
// or available at http://www.eclipse.org/legal/epl-v10.html
|
12 |
//
|
13 |
// 2. The GNU Lesser General Public License (LGPL) version 2.1 or later,
|
14 |
// included in this distribution in the file licence-lgpl-2.1.txt
|
15 |
// or available at http://www.gnu.org/licenses/lgpl.txt
|
16 |
//
|
17 |
// This library is distributed on an "AS IS" basis,
|
18 |
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
|
19 |
// See the individual licence texts for more details.
|
20 |
|
21 |
package net.htmlparser.jericho;
|
22 |
|
23 |
import java.util.*;
|
24 |
|
25 |
class StartTagTypeMarkupDeclaration extends StartTagTypeGenericImplementation {
|
26 |
static final StartTagTypeMarkupDeclaration INSTANCE=new StartTagTypeMarkupDeclaration();
|
27 |
|
28 |
static final String ELEMENT="!element";
|
29 |
static final String ATTLIST="!attlist";
|
30 |
static final String ENTITY="!entity";
|
31 |
static final String NOTATION="!notation";
|
32 |
|
33 |
private StartTagTypeMarkupDeclaration() {
|
34 |
super("markup declaration","<!",">",null,false,false,true);
|
35 |
}
|
36 |
|
37 |
protected Tag constructTagAt(final Source source, final int pos) {
|
38 |
final Tag tag=super.constructTagAt(source,pos);
|
39 |
if (tag==null) return null;
|
40 |
final String name=tag.getName();
|
41 |
if (name!=ELEMENT && name!=ATTLIST && name!=ENTITY && name!=NOTATION) return null; // can use == instead of .equals() because the names are in HtmlElements.CONSTANT_NAME_MAP
|
42 |
return tag;
|
43 |
}
|
44 |
|
45 |
protected int getEnd(final Source source, int pos) {
|
46 |
final ParseText parseText=source.getParseText();
|
47 |
boolean insideQuotes=false;
|
48 |
do {
|
49 |
final char c=parseText.charAt(pos);
|
50 |
if (c=='"') {
|
51 |
insideQuotes=!insideQuotes;
|
52 |
} else if (c=='>' && !insideQuotes) {
|
53 |
return pos+1;
|
54 |
}
|
55 |
} while ((++pos)<source.getEnd());
|
56 |
return -1;
|
57 |
}
|
58 |
}
|