var ncname = '[a-zA-Z_][\\w\\-\\.]*';
var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")";
var startTagOpen = new RegExp(("^<" + qnameCapture));
var startTagClose = /^\s*(\/?)>/;
var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>"));
var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
2、保存当前截断的位置。比如你匹配了template到 字符串长度为5 的位置,那么 index 就是 4(从0开始)
function advance(n) {
index += n;
html = html.substring(n);
}
记住这个函数哦,我传入一个数字 n,就是要把 template 从 n 截取到结尾
然后下面就看看简化的 parseHTML 源码(如果嫌长,先跳到分析)
function parseHTML(html, options) {
// 保存所有标签的对象信息,tagName,attr,这样,在解析尾部标签的时候得到所属的层级关系以及父标签
var stack = [];
var index = 0;
var last;
while (html) {
last = html;
var textEnd = html.indexOf('<');
// 如果开头是 标签的 <
if (textEnd === 0) {
/**
* 如果开头的 < 属性尾标签
* 比如 html = '
'
* 匹配出 endTagMatch =["
", "div"]
*/
* 如果开头的 < 属性尾标签
* 比如 html = '
'
* 匹配出 endTagMatch =["
", "div"]
*/
var endTagMatch = html.match(endTag);
if (endTagMatch) {
var curIndex = index;
// endTagMatch[0]="
"
advance(endTagMatch[0].length);
// endTagMatch[1]="div"
parseEndTag(endTagMatch[1], curIndex, index);
continue
}
/**
* 如果开头的 < 属性 头标签
* parseStartTag 作用是,匹配标签存在的属性,截断 template
* html = ''
* startTagMatch = {tagName: "div", attrs: []}
*/
* 如果开头的 < 属性 头标签
* parseStartTag 作用是,匹配标签存在的属性,截断 template
* html = ''
* startTagMatch = {tagName: "div", attrs: []}
*/
var startTagMatch = parseStartTag();
if (startTagMatch) {
handleStartTag(startTagMatch);
continue
}
}
var text ,rest ,next ;
// 模板起始位置 不是 <,而是文字
if (textEnd >= 0) {
text = html.substring(0, textEnd);
advance(textEnd);
}
// 处理文字,上篇文章已经讲过
if (options.chars && text) {
options.chars(text);
}
}
function parseStartTag(){...}
function handleStartTag(){...}
function parseEndTag(){...}
}
--只包含执行部分的PL/SQL块
--set serveroutput off
begin
dbms_output.put_line('Hello,everyone!');
end;
select * from emp;
--包含定义部分和执行部分的PL/SQL块
declare
v_ename varchar2(5);
begin
select
转:http://stackoverflow.com/questions/6352208/how-to-solve-plugin-execution-not-covered-by-lifecycle-configuration-for-sprin
maven报错:
Plugin execution not covered by lifecycle configuration:
要使用MonkeyRunner,就要学习使用Python,哎
先抄一段官方doc里的代码
作用是启动一个程序(应该是启动程序默认的Activity),然后按MENU键,并截屏
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRun