有限状态机
实现了一个确定型的有限状态机,可以向它注册状态跃迁规则和动作,然后在事件发生的时候通知它,别的都由它实现了。动作的原型是一个void (*)(void* params)的函数指针。
FSM的实现不依赖于任何超越标准C++的内容,也就是说,它可以使用在任何支持标准C++的环境中。顺便说一下,我在WinCE和Windows上都使用过它。
HTML2TEXT
一 个简单的例子使用有限状态机,它能够实现快速的把HTML文件转换为TEXT文件,具体的说,就是把标签(头尾tag)去掉,同时其属性也被去掉,把注释 内容去掉,把脚本和内嵌样式单中的内容去掉,把实体引用转换为实体代表的内容本身。该例子只是为了展现有限状态机的使用方式,没有考虑HTML中的标签的 大小写的问题,如果要考虑也不会复杂多少。
HTML2TEXT的实现也完全是标准语言和库实现的,只是采用了*_s之类的安全的函数,在某些环境下不可实现,不过可以简单的替换成没有_s的相应版本。
实现的基本描述:
顺 次的扫描HTML文件(当作一个以零结尾的内存区域),碰到标签<字符,开始忽略其内容,碰到>字符,重新开始记录。碰到<!--开始 忽略其内容,而到-->时重新开始记录,同时,碰到<script时开始忽略,碰到</script>时重新开始,style也 是一样的处理方式,状态机的状态相当少,包括Normal、Tag、Comment、Style、Script、Entity、End,状态机的开始状态 是Normal,最后状态是End,中间可以在这些状态之间跳转。可能的事件包括: eFindScriptBegin,eFindScriptEnd,eFindStyleBegin,eFindStyleEnd, eFindCommentBegin,eFindCommentEnd,eFindTagStart,eFindTagStop, eFindEntityStart,eFindEntityStop,eFindEnd。它们都很清晰直白,尤其是参看了initFSM_的时候更是如 此。它的输出文件也是一个以零终止的内存区域,不需要由客户分配,在析构该对象时自动释放。
其中比较差的一点是我对Parameter结构的使用,我是特意这样演示的,主要是想展现对于FSM灵活的使用方式,其实最常见也最实用的方式是只使用this作为参数。
显然,HTML2TEXT可以非常容易得扩展成一个完整的HTML Parse【可以加上DOM支持】,再加上HTML Render【包括CSS的支持】,Javascript支持和HTTP支持,就是一个Web Browser了。
分享到:
相关推荐
实用类通常是为了提高代码复用性而创建的,它们不涉及对象的创建和管理,因此常被设计为不可实例化。在Java中,我们通常通过将类的构造函数设为私有(private)来实现这一点。 标题"实用类的代码"可能是指一系列...
久不出技术类文章,我都忘...主要代码如下: 代码如下://弹出层剧中 function popup(popupName) { var _scrollHeight = $(document).scrollTop(); //获取当前窗口距离页面顶部高度 _windowHeight = $(window).height();
### 一些实用的jQuery代码片段 #### 1. 使用jQuery获取用户的IP地址 在Web开发中,有时我们需要知道用户所在的IP地址,以便进行一些特定的操作,例如地理定位、访问控制等。下面是一段使用jQuery来获取用户IP地址...
这里我们详细探讨了几个关于MATLAB图像处理的实用代码示例,包括图像反转、灰度线性变换、非线性变换、直方图均衡化以及线性和中值滤波器。 1. **图像反转**: 在MATLAB中,我们可以使用简单的数学操作来实现图像...
这一点非常方便,之前一直是在 Eclipse 里面用命令“Compare against HEAD” 来比较一个文件前后的改动。在 PyCharm 中,你可以对你的改动一览无余。 提交时比较预览 PyCharm 有同样的特性,但是你的改动是可编辑...
为了实现这一点,开发者可能需要对代码进行跨浏览器测试,并利用jQuery的兼容性优势。 总的来说,Rebox lightbox相册代码提供了高效且易用的解决方案,用于在网站上展示图片集,其响应式设计和jQuery驱动的动画效果...
- **空格计算**:通过变量`g`存储距离左端的空格数,这里设置为`s + 25`,使得小一点的树也能居中显示。 - **星号打印**:内层循环使用`i * 2 - 1`来确定当前行的星号数量,随着行数增加,星号数量也逐渐增加。 ###...
`medfilt2`函数实现了这一点。例如,`medfilt2(J,[5,5]);`是应用5x5中值滤波器对图像进行处理,可以有效地去除点状噪声。 这些MATLAB代码展示了基本的图像处理技术,包括颜色空间转换、图像增强和噪声去除,这些都...
媒体查询(Media Queries)是实现这一点的关键技术。 4. **插件与框架**:部分翻页代码可能基于现有的JavaScript库或框架,如jQuery、React或Vue.js。这些工具提供了丰富的功能和便捷的API,能简化开发流程,提高...
在探讨“C++生日歌代码”这一主题时,我们不仅会深入分析代码的结构与功能...通过深入剖析这段代码,我们可以更好地理解如何利用编程语言创造有趣且实用的应用,同时激发对计算机科学和艺术交叉领域的好奇心与探索欲。
这个压缩包文件“PHP编程实用代码”包含了适用于初学者和有一定基础的学习者提升技能的资源,尤其是对于想要深入理解BBS(Bulletin Board System,电子公告板)系统开发的人来说非常有价值。尽管描述中提到书籍版本...
《重构:改善既有代码的设计》是一本非常实用且有价值的书籍,它不仅适合于初级开发者学习重构的基础知识,也适用于高级工程师深入研究重构的技术细节。通过遵循书中的指导原则和实践案例,可以帮助开发者有效地提高...
以下代码展示了如何做到这一点: ```php $html = file_get_contents('http://www.example.com'); $dom = new DOMDocument(); @$dom->loadHTML($html); // 创建XPath对象 $xpath = new DOMXPath($dom); //...
STM8S代码生成器是一款专为STM8系列微控制器(MCU)设计的实用工具,主要功能是自动生成适用于STM8S芯片的C语言代码。STM8S是意法半导体(STMicroelectronics)推出的一款8位微控制器,广泛应用在各种嵌入式系统中,...
表白代码往往利用这一点,将情感融入到一行行代码中。 2. **代码表白的形式** - 常见的表白代码形式包括生成浪漫的图形,如爱心、玫瑰或表白的话语;播放定制的音乐或音频;或者创建交互式的网页应用,让接收者...
总的来说,"程序员向妹子表白专用代码"不仅体现了编程的实用性,还展现了其艺术性和情感表达的一面。通过学习和理解这些代码,程序员可以为自己的浪漫行动增添一份科技色彩,同时,这也是一种展示编程魅力的方式,让...
"OAM中用到的小代码"这个标题暗示我们将探讨与OAM相关的编程片段或者实用脚本,这些代码可能是为了测试OAM功能、集成其他系统或解决特定问题而编写的。描述中的重复内容"测试用的小代码.."进一步确认了这一点,意味...