公文一般在标题和正文之间还有主送机关,相关规定为:
主送机关
编排于标题下空一行位置,居左顶格,回行时仍顶格,最后一个机关名称后标全角冒号。如主送机关名称过多导致公文首页不能显示正文时,应当将主送机关名称移至版记。
如需把主送机关移至版记,除将“抄送”二字改为“主送”外,编排方法同抄送机关。既有主送机关又有抄送机关时,应当将主送机关置于抄送机关之上一行,之间不加分隔线。
这里我们先不考虑 把主送机关移至版记的情况,处理起来相对简单。
最简单的办法就是用字符串最末一个符号是为全角冒号来判断:
公文一键排版系统
程序运行结果如下:
末位字符为[:] 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()
如下:
如下:
公文一键排版系统
调试信息