Drupal:尝试将GeSHi与CKeditor一起使用

Drupal:尝试将GeSHi与CKeditor一起使用,drupal,syntax-highlighting,ckeditor,geshi,Drupal,Syntax Highlighting,Ckeditor,Geshi,我本来希望将CKeditor与GeSHi一起使用,但我遇到了一些重大困难。发生的事情是,如果我创建了一个新的内容,然后禁用CKeditor,这样我就可以编写简单的HTML,我可以在标记中包含一个代码snippet。如果我保存,GeSHi会做得很好,代码片段看起来也不错 // All rights reserved // Email: firstname.lastname@url.com ///////////////////////////////////////////////////////

我本来希望将CKeditor与GeSHi一起使用,但我遇到了一些重大困难。发生的事情是,如果我创建了一个新的内容,然后禁用CKeditor,这样我就可以编写简单的HTML,我可以在
标记中包含一个代码snippet。如果我保存,GeSHi会做得很好,代码片段看起来也不错

// All rights reserved
// Email: firstname.lastname@url.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <iostream>
#include <fstream>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

myClass::myClass()
{
    m_lthing = NULL;
    m_athing = NULL;
    m_bthing = NULL;

    m_lthingthing = NULL;
    m_athingthing = NULL;
    m_bthingthing = NULL;
}

但是,如果我尝试编辑那一段内容,CKDDTER会用代码的格式化来解决问题,特别是用特殊的转义序列替换很多字符,并且试图关闭它认为是HTML标签但实际上是C++的文件,例如,

#include
将使CKeditor在文本末尾放置一个
。然后,在最好的情况下,我的代码看起来很糟糕

在其他情况下,这种行为真的很奇怪:页面不会加载,而是给我一个服务器错误。我假设这是因为,在服务器端,CKeditor对代码段所做的一些更改正在使GeSHi崩溃,反之亦然

下面是一段示例代码,我在纯文本编辑器中逐字输入并将其包含在
标记中后,它看起来是正确的:

// All rights reserved
// Email: firstname.lastname@url.com
//////////////////////////////////////////////////////////////////////

#include &quot;stdafx.h&quot;
#include <iostream>
#include <fstream>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

myClass::myClass()
{
    m_lthing = NULL;
    m_athing = NULL;
    m_bthing = NULL;

    m_lthingthing = NULL;
    m_athingthing = NULL;
    m_bthingthing = NULL;
}</fstream></iostream>
//保留所有权利
//电子邮件:名字。lastname@url.com
//////////////////////////////////////////////////////////////////////
#包括“stdafx.h”
#包括
#包括
//////////////////////////////////////////////////////////////////////
//建造/销毁
//////////////////////////////////////////////////////////////////////
myClass::myClass()
{
m_lthing=NULL;
m_athing=NULL;
m_bthing=NULL;
m_lthingthing=NULL;
m_a长度=零;
m_b思考=NULL;
}
但是,只需单击“编辑”,然后再次单击“保存”,而不进行任何更改,会使CKeditor将代码弄乱,现在看起来如下所示:

//保留所有权利
//电子邮件:名字。lastname@url.com
//////////////////////////////////////////////////////////////////////
#包括“stdafx.h”
#包括
#包括
//////////////////////////////////////////////////////////////////////
//建造/销毁
//////////////////////////////////////////////////////////////////////
myClass::myClass()
{
m_lthing=NULL;
m_athing=NULL;
m_bthing=NULL;
m_lthingthing=NULL;
m_a长度=零;
m_b思考=NULL;
}
有人对此有什么想法吗,或者有人能推荐一个好的替代方案来替代我现在尝试使用的系统吗?我并不特别喜欢CKeditor或GeSHi,尽管到目前为止我对CKeditor还是很满意的,而且我喜欢GeSHi做MATLAB格式化的事实。此外,根据下面的回答/评论,我已经尝试了Peter Petrik概述的方法,碰撞行为仍然发生


谢谢。

看看这个-它可能会有帮助

您使用的是哪个版本的Drupal/CKEditor/GeSHi?我会验证输入格式(管理员/设置/过滤器),并确保您使用的任何格式都不会使代码与其他过滤器混淆。还要验证允许的HTML标记。

对不起,我忘了提到我已经尝试过Petrik的方法了。这对我不起作用。我想我会再试一次,因为我不确定“工具栏按钮主题”部分是否正确。他没有指定代码应该放在CKeditor主题的三个CSS文件中的哪一个。然而,这不应该影响CKeditor或GeSHi在解析代码时崩溃。我认为部分问题在于他的字符串替换列表不完整;似乎没有处理CKeditor插入的“ ”,或者关闭CPP include语句,就好像它们是HTML标记一样。谢谢。好的,我又试了一次Petrik的方法,这次成功了。有一些小细节我忽略了/误解了。它现在似乎正在工作。谢谢。我正在使用Drupal 6.20、CKEditor 6.x-1.2、GeSHi 6.x-1.4。在“输入格式->完整HTML”下,启用了GeSHi,以及HTML校正器、换行转换器和URL过滤器。在“重新排列”下,它们从上到下的顺序是URL、HTML校正器、换行符、格什。以上任何一项是否需要更改?谢谢。为了安全起见,我会关掉换行器和HTML修正器。确保GeSHi过滤器是顺序中最高的。您正在运行哪个版本的CKEditor(不是Drupal模块,而是CKEditor库版本)。