用html+javascript打造公文一键排版系统9:主送机关排版

一、主送机关的规定

公文一般在标题和正文之间还有主送机关,相关规定为:

主送机关

 

编排于标题下空一行位置,居左顶格,回行时仍顶格,最后一个机关名称后标全角冒号。如主送机关名称过多导致公文首页不能显示正文时,应当将主送机关名称移至版记。

如需把主送机关移至版记,除将“抄送”二字改为“主送”外,编排方法同抄送机关。既有主送机关又有抄送机关时,应当将主送机关置于抄送机关之上一行,之间不加分隔线。

二、主送机关行的判断

这里我们先不考虑 把主送机关移至版记的情况,处理起来相对简单。

(一)最简单的办法

最简单的办法就是用字符串最末一个符号是为全角冒号来判断:




公文一键排版系统





程序运行结果如下:

末位字符为[:]  true
末位字符为[:]  true
末位字符为[ ]  false
末位字符为[×]  false

(二)存在多余空格的情况

可见这种方法最简单,但无法应对用户在全角冒号后多输入空格的情况。

我们改用正则表达式来检测:




公文一键排版系统





程序运行结果如下:

末位字符为[:]  true
末位字符为[:]  true
末位字符为[ ]  true
末位字符为[×]  false

(三)以英文冒号结束的情况

我们还要考虑用户不小心以英文冒号结束的情况,改进代码如下:








程序运行结果如下:

末位字符为[:]  true
末位字符为[:]  true
末位字符为[ ]  true
末位字符为[:]  true
末位字符为[:]  true
末位字符为[ ]  true
末位字符为[×]  false

这样我们基本可以处理主送单位行多输入空格或者半角冒号的情况了。

三、主送机关行的排版

我们修改setDocFmt()添加对主送单位格式的处理代码 :

/功能:设置公文格式Set document format
//输入:无
//输出:无
//记录:20230726添加对附件及附件标题格式的处理代码
//      20230729添加对主送单位格式的处理代码    
function setDocFmt()
{
	taDbg.value += "\n---setDocFmt()\n";
 
	getArg(); //读取预设参数
 
	var t = getClearInfoArray();
 
	//标题
	if (cbDocTilte)
	{
		t[0]  = setDocTitle(t[0]) + '

 '; } var i = (cbDocTilte ? 1 : 0);//2023-07-26增加 while (i < t.length) { if (i < t.length-1)//20230716增加 { if (isBadging(t[i],t[i+1]))//是落款? { //落款前加空行 t[i-1] += '

 '; //设置落款 t[i] = setBadging(t[i],t[i+1]); t[i+1] = null; taDbg.value += "\nt[" + (i-1) + "]=" + t[i-1] + "\nt[" + i +"]=" + t[i] + "\nt[" +(i+1) +"]=" + t[i+1]; //i++; //i++; i += 2; continue; } if (isAttachmentTitle(t[i],t[i+1])) //是附件及附件标题? { t[i] = setAttachmentTitleFmt(t[i],t[i+1]); t[i+1] = null; taDbg.value += "\nt[" + (i-1) + "]=" + t[i-1] + "\nt[" + i +"]=" + t[i] + "\nt[" +(i+1) +"]=" + t[i+1]; //i++; //i++; i += 2; continue; } }//if if (isMainDeDe(t[i]))//是主送单位吗?20230729增 { t[i] = setMainDeDe(t[i]);//是 i++; continue; } t[i] = setParaFmt(t[i]); i++; }//while() //alert(t.join('')); edRichBody.innerHTML = t.join(''); }//setDocFmt()

再编写设置主送机关行格式的函数 setMainDeDe():

//功能:设置主送机关行格式main delivery department
//输入:p=送机关行字符串
//输出:主送机关行格式化字符串
//记录:20230729创建
function setMainDeDe(s)
{
	taDbg.value += "\n---setMainDeDe()\n";
	var p = s;
	var a = null;
	
	if (isIncludeSpace(p))
	{
		p = p.eliminateSpace();
		a = '已删除多余的字符';
	}

	if (isMainDeDeWithColonEn(p))
	{
		p = p.replaceAll(':', ':');
		a += ((null==a) ? null : ';') + '半角冒号已转为全角冒号';
	}

	p = '

' + p; if (null != a) { p += g_sWarmPromptLeft + g_sWarmPromptTxt + a + g_sWarmPromptRight; } taDbg.value += p + "\n"; return p; }//setMainDeDe()

四、程序运行效果

如下:

用html+javascript打造公文一键排版系统9:主送机关排版_第1张图片

五、完整代码

如下:






公文一键排版系统
 

 

 

实时编辑区

参数设置 公文标题:排版内容包括公文标题

正文一级标题:

正文二级标题: 粗体

正文三级标题: 粗体

正文: 行距(行间距):  段落首行行首空格数:

调试信息

你可能感兴趣的:(原创作品,网页制作,JavaScript,html,javascript,正则表达式,公文排版,前端,温馨提示)