# coding=utf-8

import json
import os
import subprocess
import tempfile
import uuid

from django.core.urlresolvers import reverse
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.cache import get_cache_key

from pika import BasicProperties
from pika import BlockingConnection
from pika import ConnectionParameters

from eulxml import xmlmap
from eulexistdb.db import ExistDB


from roche.settings import RABBITMQ_SERVER
from common.utils import XSL_TRANSFORM_1
from browser.models import RocheTEI
from .forms import TextAnnotationForm
from .models import TextAnnotation

#
# Sample test for analysis
#
INITIAL_TEXT = u"""歐陽修 ，字 永叔 ， 廬陵人。 四歲而孤，母鄭，守節自誓，親誨之學，家貧，至以荻畫地學書。幼敏悟過人，讀書輒成誦。 及冠 ，嶷然有聲。

宋興且 百年 ，而文章體裁，猶仍五季余習。鎪刻駢偶，淟涊弗振，士因陋守舊，論卑氣弱。 蘇舜元 、舜欽、 柳開 、 穆修 輩，咸有意作而張之，而力不足。 修游隨，得唐韓愈遺稿於廢書簏中，讀而心慕焉。苦志探賾，至忘寢食，必欲並轡絕馳而追與之並。

舉進士，試南宮第一 ，擢甲科，調西京推官。始從尹洙遊，為古文，議論當世事，迭相師友，與梅堯臣遊，為歌詩相倡和，遂以文章名冠天下。入朝，為館閣校勘。

范仲淹以言事貶，在廷多論救，司諫高若訥獨以為當黜。 修貽書責之，謂其不復知人間有羞恥事。若訥上其書，坐貶夷陵令，稍徙乾德令、武成節度判官。仲淹使陝西，辟掌書記。 修笑而辭曰： 「 昔者之舉，豈以為己利哉？同其退不同其進可也。 」久之，複校勘，進集賢校理。 慶曆 三年 ，知諫院。時仁宗更用大臣， 杜衍 、 富弼 、 韓琦 、 范仲淹皆在位，增諫官員，用天下名士， 修首在選中。每進見，帝延問執政，咨所宜行。既多所張弛，小人翕翕不便。 修慮善人必不勝，數為帝分別言之。初， 范仲淹之貶饒州也， 修與尹洙 、 余靖皆以直仲淹見逐，目之曰「 黨人 」 。自是，朋黨之論起， 修乃為《 朋黨論 》以進。其略曰： 「 君子以同道為朋，小人以同利為朋，此自然之理也。臣謂小人無朋，惟君子則有之。小人所好者利祿，所貪者財貨，當其同利之時，暫相黨引以為朋者，偽也。及其見利而爭先，或利盡而反相賊害，雖兄弟親戚，不能相保，故曰小人無朋。君子則不然，所守者道義，所行者忠信，所惜者名節。以之修身，則同道而相益，以之事國，則同心而共濟，終始如一 ，故曰惟君子則有朋。紂有臣億萬 ，惟億萬心，可謂無朋矣，而紂用以亡。武王有臣三千 ，惟一心，可謂大朋矣，而周用以興。蓋君子之朋，雖多而不厭故也。故為君但當退小人之偽朋，用君子之真朋，則天下治矣。 」

修論事切直，人視之如仇，帝獨獎其敢言，面賜立品服。顧侍臣曰： 「 如歐陽修 者，何處得來？ 」同修起居注，遂知制誥。故事，必試而後命，帝知修 ，詔特除之。

奉使河東。自西方用兵，議者欲廢麟州以省饋餉。 修曰： 「 麟州 ，天險，不可廢；廢之，則河內郡縣，民皆不安居矣。不若分其兵，駐並河內諸堡，緩急得以應援，而平時可省轉輸，於策為便。 」由是州得存。又言： 「 忻、代、岢嵐多禁地廢田，願令民得耕之，不然，將為敵有。 」朝廷下其議，久乃行，歲得粟數 百萬斛 。凡河東賦斂過重民所不堪者，奏罷十數事。使還，會保州兵亂，以為龍圖閣直學士、河北都轉運使 。陛辭，帝曰： 「 勿為久留計，有所欲言，言之。 」對曰： 「 臣在諫職得論事，今越職而言，罪也。 」帝曰： 「 第言之，毋以中外為間。 」賊平，大將李昭亮 、通判馮博文私納婦女， 修捕博文系獄，昭亮懼，立出所納婦。兵之始亂也，招以不死，既而皆殺之，脅從 二千人 ，分隸諸郡。 富弼為宣撫使 ，恐後生變，將使同日誅之，與修遇於內黃 ， 夜半 ，屏人告之故。 修曰： 「 禍莫大於殺已降，況脅從乎？既非朝命，脫一郡不從，為變不細。 」弼悟而止。

方是時， 杜衍等相繼以黨議罷去， 修慨然上疏曰： 「 杜衍 、 韓琦 、 范仲淹 、 富弼 ，天下皆知其有可用之賢，而不聞其有可罷之罪，自古小人讒害忠賢，其說不遠。欲廣陷良善，不過指為朋黨，欲動搖大臣，必須誣以顓權，其故何也？去一善人，而眾善人尚在，則未為小人之利；欲盡去之，則善人少過，難為一一求瑕，唯指以為黨，則可一時盡逐，至如自古大臣，已被主知而蒙信任，則難以他事動搖，唯有顓權是上之所惡，必須此說，方可傾之。正士在朝，群邪所忌，謀臣不用，敵國之福也。今此 四人 一旦罷去，而使群邪相賀於內， 四夷相賀於外，臣為朝廷惜之。 」於是邪党益忌修 ，因其孤甥張氏獄傅致以罪，左遷知制誥、知滁州 。居 二年 ，徙揚州 、 潁州 。複學士，留守南京，以母憂去。服除，召判流內銓，時在外 十二年矣。帝見其發白，問勞甚至。小人畏修復用，有詐為修奏，乞澄汰內侍為奸利者。其群皆怨怒，譖之，出知同州 ，帝納吳充言而止。遷翰林學士，俾修 《 唐書 》 。奉使契丹，其主命貴臣 四人押宴，曰： 「 此非常制，以卿名重故爾。 」

知嘉祐 二年貢舉。時士子尚為險怪奇澀之文，號「 太學體 」 ， 修痛排抑之，凡如是者輒黜。畢事，向之囂薄者伺修出，聚噪于馬首，街邏不能制；然場屋之習，從是遂變。

加龍圖閣學士、知開封府，承包拯威嚴之後，簡易循理，不求赫赫名，京師亦治。旬月，改群牧使。 《 唐書 》成，拜禮部侍郎兼翰林侍讀學士。 修在翰林 八年 ，知無不言。河決商胡，北京留守賈昌朝欲開橫壟故道，回河使東流。有李仲昌者，欲導入六塔河，議者莫知所從。 修以為： 「 河水重濁，理無不淤，下流既淤，上流必決。以近事驗之，決河非不能力塞，故道非不能力複，但勢不能久耳。橫壟功大難成，雖成將複決。 六塔狹小，而以全河注之，濱、棣、德、博必被其害。不若因水所趨，增堤峻防，疏其下流，縱使入海，此數 十年之利也。 」 宰相陳執中主昌朝，文彥博主仲昌，竟為河北患。

台諫論執中過惡，而執中猶遷延固位。 修上疏，以為「 陛下拒忠言，庇愚相，為聖德之累 」 。未幾，執中罷。狄青為樞密使 ，有威名，帝不豫，訛言籍籍， 修請出之於外，以保其終，遂罷知陳州 。 修嘗因水災上疏曰： 「 陛下臨禦三紀，而儲宮未建。昔漢文帝初即位，以群臣之言，即立太子，而享國長久，為漢太宗。唐明宗惡人言儲嗣事，不肯早定，致秦王之亂，宗社遂覆。陛下何疑而久不定乎？ 」其後建立英宗，蓋原於此。

五年 ，拜樞密副使 。 六年 ，參知政事。 修在兵府，與曾公亮考天下兵數及三路屯戍多少、地理遠近，更為圖籍。凡邊防久缺屯戍者，必加搜補。其在政府，與韓琦同心輔政。凡兵民、官吏、財利之要，中書所當知者，集為總目，遇事不復求之有司。時東宮猶未定，與韓琦等協定大議，語在《 琦傳 》 。英宗以疾未親政，皇太后垂簾，左右交構，幾成嫌隙。 韓琦奏事，太后泣語之故。琦以帝疾為解，太后意不釋， 修進曰： 「 太后事仁宗數 十年 ，仁德著於天下。昔溫成之寵，太后處之裕如；今母子之間，反不能容邪？ 」太后意稍和， 修復曰： 「 仁宗在位久，德澤在人。故 一日晏駕，天下奉戴嗣君，無 一人敢異同者。今太后一婦人，臣等五六書生耳，非仁宗遺意，天下誰肯聽從。 」太后默然，久之而罷。

修平生與人盡言無所隱。及執政，士大夫有所幹請，輒面諭可否，雖台諫官論事，亦必以是非詰之，以是怨誹益眾。帝將追崇濮王，命有司議，皆謂當稱皇伯，改封大國。 修引《 喪服記 》 ，以為： 「 '為人後者，為其父母服。'降 三年為期，而不沒父母之名，以見服可降而名不可沒也。若本生之親，改稱皇伯，曆考前世，皆無典據。進封大國，則又禮無加爵之道。故中書之議，不與眾同。 」太后出手書，許帝稱親，尊王為皇，王夫人為後。帝不敢當。於是禦史 呂誨等詆修主此議，爭論不已，皆被逐。惟蔣之奇之說合修意， 修薦為禦史 ，眾目為奸邪。之奇患之，則思所以自解。 修婦弟薛宗孺有憾于修 ，造帷薄不根之謗摧辱之，輾轉達于中丞彭思永 ，思永以告之奇，之奇即上章劾修 。神宗初即位，欲深護修 。訪故宮臣孫思恭 ，思恭為辨釋， 修杜門請推治。帝使詰思永、之奇，問所從來，辭窮，皆坐黜。 修亦力求退，罷為觀文殿學士、刑部尚書、知亳州 。明年，遷兵部尚書、知青州 ，改宣徽南院使、判太原府。辭不拜，徙蔡州 。

修以風節自持，既數被污蔑，年六十 ，即連乞謝事，帝輒優詔弗許。及守青州 ，又以請止散青苗錢，為安石所詆，故求歸愈切。 熙甯 四年 ，以太子少師致仕。 五年 ，卒，贈太子太師 ，諡曰文忠。

修始在滁州 ，號醉翁，晚更號六一居士。天資剛勁，見義勇為，雖機阱在前，觸發之不顧。放逐流離，至於再三 ，志氣自若也。方貶夷陵時，無以自遣，因取舊案反覆觀之，見其枉直乖錯不可勝數，於是仰天歎曰： 「 以荒遠小邑，且如此，天下固可知。 」自爾，遇事不敢忽也。學者求見，所與言，未嘗及文章，惟談吏事，謂文章止於潤身，政事可以及物。凡歷數郡，不見治跡，不求聲譽，寬簡而不擾，故所至民便之。或問： 「 為政寬簡，而事不弛廢，何也？ 」曰： 「 以縱為寬，以略為簡，則政事弛廢，而民受其弊。吾所謂寬者，不為苛急；簡者，不為繁碎耳。 修幼失父，母嘗謂曰： 「汝父為吏，常夜燭治官書，屢廢而歎。吾問之，則曰：'死獄也，我求其生，不得爾。'吾曰：'生可求乎？'曰：'求其生而不得，則死者與我皆無恨。夫常求其生，猶失之死，而世常求其死也。'其平居教他子弟，常用此語，吾耳熟焉。 」 修聞而服之終身。

為文天才自然，豐約中度。其言簡而明，信而通，引物連類，折之於至理，以服人心。超然獨騖，眾莫能及，故天下翕然師尊之。獎引後進，如恐不及，賞識之下，率為聞人。 曾鞏 、 王安石 、蘇洵、洵子軾、轍，布衣屏處，未為人知，脩即遊其聲譽，謂必顯於世。篤于朋友，生則振掖之，死則調護其家。

好古嗜學，凡周、漢以降金石遺文、斷編殘簡， 一切掇拾，研稽異同，立說于左，的的可表證，謂之《 集古錄 》 。奉詔修 《 唐書 》紀、志、表，自撰《 五代史記 》 ，法嚴詞約，多取《 春秋 》遺旨。 蘇軾敘其文曰： 「 論大道似韓愈 ，論事似陸贄，記事似司馬遷，詩賦似李白。 」識者以為知言。

子發字伯和，少好學，師事安定胡瑗，得古樂鍾律之說，不治科舉文詞，獨探古始立論議。自書契以來，君臣世系，制度文物，旁及天文、地理，靡不悉究。以父恩，補將作監主薄，賜進士出身，累遷殿中丞。卒，年四十六 。 蘇軾哭之，以謂發得文忠公之學，漢伯喈、晉茂先之流也。

中子棐字叔弼，廣覽強記，能文辭，年十三時，見脩著《 鳴蟬賦 》 ，侍側不去。 修撫之曰： 「 兒異日能為吾此賦否？ 」因書以遺之。用蔭，為秘書省正字，登進士乙科，調陳州判官，以親老不仕。 修卒，代草遺表，神宗讀而愛之，意修自作也。服除，始為審官主簿，累遷職方員外郎 、知襄州 。曾布執政，其婦兄魏泰倚聲勢來居襄，規占公私田園，強市民貨，郡縣莫敢誰何。至是，指州門東偏官邸廢址為天荒，請之。吏具成牘至，棐曰： 「 孰謂州門之東偏而有天荒乎？ 」卻之。眾共白曰： 「 泰橫于漢南久，今求地而緩與之，且不可，而又可卻邪？ 」棐竟持不與。泰怒，譖於布，徙知潞州，旋又罷去。 元符末，還朝。曆吏部、右司二郎中，以直秘閣知蔡州 。蔡地薄賦重， 轉運使又為覆折之令，多取於民，民不堪命。會有詔禁止，而佐吏憚使者，不敢以詔旨從事。棐曰： 「 州郡之於民，詔令苟有未便，猶將建請。今天子詔意深厚，知覆折之病民，手詔止之。若有憚而不行，何以為長吏？ 」命即日行之。未幾，坐黨籍廢， 十餘年卒。

論曰： 「 三代而降，薄乎秦、漢，文章雖與時盛衰，而藹如其言，曄如其光，皦如其音，蓋均有先王之遺烈。涉晉、魏而弊，至唐韓愈氏振起之。唐之文，涉五季而弊，至宋歐陽修 又振起之。挽百川之頹波，息千古之邪說，使斯文之正氣，可以羽翼大道，扶持人心，此兩人之力也。愈不獲用， 修用矣，亦弗克究其所為，可為世道惜也哉！

劉敞 ，字原父 ，臨江新喻人。舉慶曆進士，廷試第一 。編排官王堯臣，其內兄也，以親嫌自列，乃以為第二 。通判蔡州 ，直集賢院，判尚書考功。

夏竦薨，賜諡文正。 敞言： 「 諡者，有司之事，竦行不應法。今百司各得守其職，而陛下侵臣官。 」疏三上，改諡文莊。方議定大樂，使中貴人參其間。 敞諫曰： 「 王事莫重于樂。今儒學滿朝，辨論有餘，而使若趙談者參之，臣懼為袁盎笑也。 」權度支判官，徙三司使。

秦州與羌人爭古渭地。仁宗問敞 ： 「 棄守孰便？ 」 敞曰： 「 若新城可以蔽秦州 ，長無羌人之虞，傾國守焉可也。或地形險利，賊乘之以擾我邊鄙，傾國爭焉可也。今何所重輕，而殫財困民，捐士卒之命以規小利，使曲在中國，非計也。 」議者多不同， 秦州自是多事矣。

溫成後追冊，有佞人獻議，求立忌。 敞曰： 「 豈可以私昵之故，變古越禮乎？ 」乃止。吳充以典禮得罪，馮京救之，亦罷近職。 敞因對極論之。帝曰： 「 充能官，京亦亡它，中書惡其太直，不相容耳。 」 敞曰： 「 陛下寬仁好諫，而中書乃排逐言者，是蔽君之明，止君之善也。臣恐感動陰陽，有日食、地震、風霾之異。 」已而果然。因勸帝收攬威權，無使聰明蔽塞，以消災咎。帝深納之，以同修起居注。未 一月 ，擢知制誥。 宰相陳執中惡其斥己，沮止之，帝不聽。宦者石全彬領觀察使 ，意不愜，有慍言，居 三日為真， 敞封還除書，不草制。

奉使契丹，素習知山川道徑，契丹導之行，自古北口至柳河，回屈殆 千里 ，欲誇示險遠。 敞質譯人曰： 「 自松亭趨柳河，甚徑且易，不數日可抵中京，何為故道此？ 」譯相顧駭愧曰： 「 實然。但通好以來，置驛如是，不敢變也。 」 順州山中有異獸，如馬而食虎豹，契丹不能識，問敞 。 敞曰： 「 此所謂駮也。 」為說其音聲形狀，且誦《 山海經 》 、 《 管子 》書曉之，契丹益嘆服。使還，求知揚州 。

狄青起行伍為樞密使 ，每出入，小民輒聚觀，至相與推誦其拳勇，至壅馬足不得行。帝不豫，人心動搖，青益不自安。 敞辭赴郡，為帝言曰： 「 陛下幸愛青，不如出之，以全其終。 」帝頷之，使出諭中書，青乃去位。

揚之雷塘，漢雷陂也，舊為民田。其後官取瀦水而不償以它田，主皆失業。然塘亦破決不可漕，州複用為田。 敞據唐舊券，悉用還民，發運使爭之， 敞卒以予民。天長縣鞫王甲殺人，既具獄， 敞見而察其冤，甲畏吏，不敢自直。 敞以委戶曹杜誘，誘不能有所平反，而傅致益牢。將論囚， 敞曰： 「 冤也。 」親按問之。甲知能為己直，乃敢告，蓋殺人者，富人陳氏也。相傳以為神明。徙鄆州 ，鄆比易守，政不治，市邑攘敓公行。 敞決獄訟，明賞罰，境內肅然。客行壽張道中，遺一囊錢，人莫敢取，以告裏長，裏長為守視，客還，取得之。又有暮遺物市中者，旦往訪之，故在。先是，久旱，地多蝗。 敞至而雨，蝗出境。召糾察在京刑獄。營卒桑達等醉鬥，指斥乘輿。皇城使捕送開封，棄達市。 敞移府，問何以不經審訊。府報曰： 「 近例，凡聖旨及中書、樞密所鞫獄，皆不慮問。 」 敞奏請一準近格，樞密院不肯行， 敞力爭之，詔以其章下府，著為令。

嘉祐祫享，群臣上尊號， 宰相請撰表。 敞說止不得，乃上疏曰： 「 陛下不受徽號且 二十年 。今複加數字，不足盡聖德，而前美並棄，誠可惜也。今歲以來，頗有災異，正當寅畏天命，深自抑損，豈可於此時乃以虛名為累。 」帝覽奏，顧侍臣曰： 「 我意本謂當爾。 」遂不受。

蜀人龍昌期著書傳經，以詭僻惑眾。文彥博薦諸朝，賜五品服。 敞與歐陽修俱曰： 「 昌期違古畔道，學非而博，王制之所必誅，未使即少正卯之刑，已幸矣，又何賞焉。乞追還詔書，毋使有識之士，窺朝廷深淺。 」昌期聞之，懼不敢受賜。

敞以識論與眾忤，求知永興軍，拜翰林侍讀學士。大姓範偉為奸利，冒同姓戶籍 五十年 ，持府縣短長，數犯法。 敞窮治其事，偉伏罪，長安中訁雚喜。未及受刑， 敞召還，判三班院，偉即變前獄，至於四五 ，卒之付禦史決。

敞侍英宗講讀，每指事據經，因以諷諫。時兩宮方有小人間言，諫者或訐而過直。 敞進讀《 史記 》 ，至堯授舜以天下，拱而言曰： 「 舜至側微也，堯禪之以位，天地享之， 百姓戴之，非有他道，惟孝友之德，光於上下耳。 」帝竦體改容，知其以義理諷也。皇太后聞之，亦大喜。

積苦眩瞀，屢予告。帝固重其才，每燕見他學士，必問敞安否；帝食新橙，命賜之。疾少間，複求外，以為汝州 ，旋改集賢院學士、判南京禦史台。 熙甯元年，卒，年五十 。

敞學問淵博，自佛老、卜筮、天文、方藥、山經、地志，皆究知大略。嘗夜視鎮星，謂人曰： 「 此於法當得土，不然，則生女。 」後數月，兩公主生。又曰： 「 歲星往來虛、危間，色甚明盛，當有興于齊者。 」歲余而英宗以齊州 防禦使入承大統。嘗得先秦彝鼎數十 ，銘識奇奧，皆案而讀之，因以考知三代制度，尤珍惜之。每曰： 「 我死，子孫以此蒸嘗我。 」朝廷每有禮樂之事，必就其家以取決焉。為文尤贍敏。掌外制時，將下直，會追封王、主 九人 ，立馬卻坐，頃之， 九製成。 歐陽修每於書有疑，折簡來問，對其使揮筆，答之不停手，修服其博。長於《 春秋 》 ，為書 四十卷 ，行于時。弟攽，子奉世。

攽字貢父，與敞同登科，仕州縣 二十年 ，始為國子監直講。 歐陽修 、 趙概薦試館職， 禦史中丞王陶有夙憾，率侍御史蘇寀共排之，攽官已員外郎 ，才得館閣校勘。 熙甯中，判尚書考功、同知太常禮院。

詔封太祖諸孫行尊者為王，奉太祖後。攽言： 「 禮，諸侯不得祖天子，當自奉其國之祖。宜崇德昭、德芳之後，世世勿降爵，宗廟祭祀，使之在位，則所以褒揚藝祖者著矣。 」後二王紹封，如攽議。

方更學校貢舉法，攽曰： 「 本朝選士之制，行之 百年 ，累代將相名卿，皆由此出，而以為未嘗得人，不亦誣哉。願因舊貫，毋輕議改法。夫士修於家，足以成德，亦何待于學官程課督趣之哉。 」

王安石在經筵，乞講者坐。攽曰： 「 侍臣講論於前，不可安坐，避席立語，乃古今常禮。君使之坐，所以示人主尊德樂道也；若不命而請，則異矣。 」禮官皆同其議，至今仍之。考試開封舉人，與同院王介爭詈，為監察禦史所劾罷。禮院廷試始用策，初，考官呂惠卿列阿時者在高等，訐直者反居下。攽覆考，悉反之。又嘗詒安石書，論新法不便。安石怒摭前過，斥通判泰州 ，以集賢校理、判登聞檢院、戶部判官知曹州 。曹為盜區，重法不能止。攽曰： 「 民不畏死，奈何以死懼之。 」至，則治尚寬平，盜亦衰息。為開封府判官，複出為京東轉運使 。部吏罷軟不逮者，務全安之。徙知兗 、 亳 二州 。吳居厚代為轉運使 ，能奉行法令，致財賦，乃追坐攽廢弛，黜監衡州鹽倉。

哲宗初，起知襄州 。入為秘書少監，以疾求去，加直龍圖閣、知蔡州 。於是給事中孫覺 、 胡宗愈 、 中書舍人 蘇軾 、範百祿言： 「 攽博記能文章，政事侔古循吏，身兼數器，守道不回，宜優賜之告，使留京師。 」至蔡數月，召拜中書舍人 。請復舊制，建紫微閣於西省。竟以疾不起，年六十七 。

攽所著書 百卷 ，尤邃史學。作《 東漢刊誤 》 ，為人所稱。預司馬光修《 資治通鑒 》 ，專職漢史。為人疏俊，不修威儀，喜諧謔，數用以招怨悔，終不能改。

奉世字仲馮，天資簡重，有法度。中進士第。 熙甯 三年 ，初置樞密院諸房檢詳文字，以太子中允居吏房。

先是，進奏院每 五日具定本報狀，上樞密院，然後傳之四方。而邸吏輒先期報下，或矯為家書，以入郵置。奉世乞革定本，去實封，但以通函騰報。從之。神宗稱其奉職不苟，加集賢校理、檢正中書戶房公事，改刑房，進直史館、國史院編修官。大理治相州獄，詳斷官竇革以白奉世，奉世曰： 「 君自以法從事，毋庸白。 」後蔡確以是文致奉世罪，謫降蔡州糧料院。久之，為吏部員外郎 。

元祐初，曆度支左司郎中、起居郎、天章閣待制、樞密都承旨、戶部吏部侍郎、權戶部尚書。 七年 ，拜樞密直學士，簽書院事。哲宗親政，用二內侍為押班， 中書舍人呂希純封還之。帝謂有近例，奉世曰： 「 雖有近例，奈人不可戶曉，顧以率先施行為非耳。 」帝為反命。既而章惇當國，奉世乞免去。

紹聖元年，以端明殿學士知成德軍，改定州 。逾年，知成都府。過都入覲，欲述朋黨傾邪之狀。帝將聽其來，曾布曰： 「 元祐變先朝法，無一當者，奉世有力焉，最為漏網，恐不足見。 」遂不許。明年，責光祿少卿，分司南京，居郴州。 禦史中丞邢恕劾奉世合劉摯傾害大臣，附呂大防、 蘇轍 ，遂登政府，再貶隰州團練副使。

徽宗立，盡還其官職，知定州 、大名府、 鄆州 。 崇甯初，再奪職，責居沂、袞，以赦得歸。政和 三年 ，複端明殿學士。薨，年七十三 。

奉世優於吏治，尚安靜，文詞雅贍，最精《 漢書 》學。常雲： 「 家世唯知事君，內省不愧怍士大夫公論而已。得喪，常理也，譬如寒暑加人，雖善攝生者不能無病，正須安以處之。 」

曾鞏 ，字子固 ，建昌南豐人。生而警敏，讀書數百言，脫口輒誦。年十二 ，試作《 六論 》 ，援筆而成，辭甚偉。甫冠，名聞四方。 歐陽修見其文，奇之。

中嘉祐 二年進士第。調太平州司法參軍，召編校史館書籍，遷館閣校勘、集賢校理，為實錄檢討官。出通判越州 ，州舊取酒場錢給募牙前，錢不足，賦諸鄉戶，期 七年止；期盡，募者志於多入，猶責賦如初。 鞏訪得其狀，立罷之。歲饑，度常平不足贍，而田野之民，不能皆至城邑。諭告屬縣，諷富人自實粟，總十五萬石，視常平價稍增以予民。民得從便受粟，不出田裏，而食有餘。又貸之種糧，使隨秋賦以償，農事不乏。

知齊州 ，其治以疾奸急盜為本。曲堤周氏擁貲雄裏中，子高橫縱，賊良民，汙婦女，服器上僭，力能動權豪，州縣吏莫敢詰， 鞏取置於法。章邱民聚黨村落間，號「 霸王社 」 ，椎剽奪囚，無不如志。 鞏配 三十一人 ，又屬民為保伍，使幾察其出入，有盜則鳴鼓相援，每發輒得盜。有葛友者，名在捕中， 一日 ，自出首。 鞏飲食冠裳之，假以騎從，輦所購金帛隨之，誇徇四境。盜聞，多出自首。 鞏外視章顯，實欲攜貳其徒，使之不能複合也。自是外戶不閉。河北發民浚河，調及它路，齊當給夫二萬 。縣初按籍三丁出夫一 ， 鞏括其隱漏，至於九而取一 ，省費數倍。又弛無名渡錢，為橋以濟往來。徙傳舍，自長清抵博州 ，以達于魏，凡省六驛，人皆以為利。徙襄州 、 洪州 。會江西歲大疫， 鞏命縣鎮亭傳，悉儲藥待求，軍民不能自養者，來食息官舍，資其食飲衣衾之具，分醫視診，書其全失、多寡為殿最。師征安南，所過州為 萬人備。他吏暴誅亟斂，民不堪。 鞏先期區處猝集，師去，市里不知。加直龍圖閣、知福州 。南劍將樂盜廖恩既赦罪出降，余眾潰複合，陰相結附，旁連數州，尤桀者呼之不至，居人懾恐。 鞏以計羅致之，繼自歸者二百輩。福多佛寺，僧利其富饒，爭欲為主守，賕請公行。 鞏俾其徒相推擇，識諸籍，以次補之。授帖於府庭，卻其私謝，以絕左右徼求之弊。 福州無職田，歲鬻園蔬收其直，自入常三四十萬 。 鞏曰： 「 太守與民爭利，可乎？ 」罷之。後至者亦不復取也。

徙明 、 亳 、 滄 三州 。 鞏負才名，久外徒，世頗謂偃蹇不偶。 一時後生輩鋒出， 鞏視之泊如也。過闕，神宗召見，勞問甚寵，遂留判三班院。上疏議經費，帝曰： 「 鞏以節用為理財之要，世之言理財者，未有及此。 」帝以《 三朝 》 、 《 兩朝國史 》各自為書，將合而為一 ，加鞏史館修撰，專典之，不以大臣監總，既而不克成。會官制行，拜中書舍人 。時自三省百職事，選授一新，除書日至十數，人人舉其職，於訓辭典約而盡。尋掌延安郡王牒奏。故事命翰林學士，至是特屬之。甫數月，丁母艱去。又數月而卒，年六十五 。

鞏性孝友，父亡，奉繼母益至，撫四弟、 九妹于委廢單弱之中，宦學昏嫁， 一出其力。為文章，上下馳騁，愈出而愈工，本原《 六經 》 ，斟酌於司馬遷、 韓愈 ， 一時工作文詞者，鮮能過也。少與王安石游，安石聲譽未振， 鞏導之于歐陽修 ，及安石得志，遂與之異。神宗嘗問： 「 安石何如人？ 」對曰： 「 安石文學行義，不減揚雄，以吝故不及。 」帝曰： 「 安石輕富貴，何吝也？ 」曰： 「 臣所謂吝者，謂其勇於有為，吝於改過耳。 」帝然之。呂公著嘗告神宗，以鞏為人行義不如政事，政事不如文章，以是不大用雲。弟布，自有傳，幼弟肇。

肇字子開，舉進士，調黃岩簿，用薦為鄭州教授，擢崇文校書、館閣校勘兼國子監直講、同知太常禮院。太常自秦以來，禮文殘缺，先儒各以臆說，無所稽據。肇在職，多所厘正。親祠皇地祗於北郊，蓋自肇發之，異論莫能奪其議。

兄布以論市易事被責，亦奪肇主判。滯於館下，又多希旨窺伺者，眾皆危之，肇恬然無慍。 曾公亮薨，肇狀其行，神宗覽而嘉之。遷國史編修官，進吏部郎中，遷右司，為《 神宗實錄 》檢討。 元祐初，擢起居舍人 。未幾，為中書舍人 。論葉康直知秦州不當，執政訝不先白， 禦史因攻之。肇求去， 範純仁語於朝曰： 「 若善人不見容，吾輩不可居此矣。 」力為之言，乃得釋。

門下侍郎韓維奏範百祿事，太皇太后以為讒毀，出守鄧。肇言： 「 維為朝廷辨邪正是非，不可以疑似逐。 」不草制。 諫議大夫王覿，以論胡宗愈 ，出守潤，肇言： 「 陛下寄腹心于大臣，寄耳目於台諫， 二者相須，闕一不可。今覿論執政即去之，是愛腹心而塗耳目也。 」帝悟，加覿直龍圖閣。

太皇受冊，詔遵章獻故事，禦文德殿。肇言： 「 天聖初，兩制定議受冊崇政，仁宗特改焉，此蓋一時之制。今帝述仁宗故事，以極崇奉孝敬之誠，可謂至矣。臣竊謂太皇當於此時特下詔揚帝孝敬之誠，而固執謙德，屈從天聖兩制之議，止於崇政，則帝孝愈顯，太皇之德愈尊矣。 」坤成節上壽，議令百官班崇政。肇又言： 「 天聖 三年 ，近臣班殿廷， 百官止請內東門拜表。至 九年 ，始禦會慶。今太皇盛德，不肯自同章獻，宜如 三年之制。 」並從之。

四年 ，春旱，有司猶講春宴。肇同彭汝礪上疏曰： 「 天菑方作，正君臣側身畏懼之時。乃相與飲食燕樂，恐無以消複天變。 」翼日，有旨罷宴。蔡確貶新州，肇先與汝礪相約極論。會除給事中，汝礪獨封還制書，言者謂肇賣友，略不自辨。以寶文閣待制知潁州 ，徙鄧、齊、 陳州 、應天府。

七年 ，入為吏部侍郎。肇在禮院時，啟親祠北郊之議。是歲當郊，肇堅抗前說，既而合祭天地，乃自劾，改刑部。請不已，出知徐州 ，徙江寧府。帝親政，更用舊臣，數稱肇議禮，趣入對。肇言： 「 人主雖有自然之聖質，必賴左右前後得人，以為立政之本。宜於此時選忠信端良之士，置諸近班，以參謀議，備顧問。與夫深處法宮，親近ＮＪ禦，其損益相去萬萬矣。 」貴近惡其語，出知瀛州 ，與兄布易地。時方治實錄譏訕罪，降為滁州 。稍複集賢殿修撰。曆泰州 、 海州 。徽宗即位，複召為中書舍人 。

日食 四月朔，當降詔求言。肇具述帝旨，詔下，投匭者如織。章惇惡之，欲因事去肇，帝不聽。 元祐臣僚被譴者，鹹以赦恩甄敘。肇請亻並錄死者，作訓詞，哀厚惻怛，讀者為之感愴。遷翰林學士兼侍讀。諫官陳瓘、給事中龔原以言得罪，無敢救，肇極力論解。時論者謂元祐 、 紹聖 ，均為有失，兄布傳帝命，使肇作詔諭天下。肇見帝言： 「 陛下思建皇極，以消弭朋黨，須先分別君子小人，賞善罰惡，不可偏廢。 」開說備至。已而詔從中出。布之拜相，肇適當制， 國朝學士弟草兄制，唯韓維與肇，為衣冠榮。建中靖國元年，太史奏日又當食 四月 。肇請對言： 「 比歲日食正陽，咎異章著。陛下簡儉清淨之化，或衰於前；聲色服玩之好，或萌於心；忠邪賢不肖，或有未辨；賞慶刑威，或有未當。左右阿諛，壅蔽矯舉，民冤失職，鬱不得伸。此宜反覆循省，痛自克責，以塞天變。 」言發涕下，帝悚然順納。

兄布在相位，引故事避禁職，拜龍圖閣學士、提舉中太一宮。未幾，出知陳州 ，曆太原、應天府 、 揚定 二州 。 崇甯初，落職，謫知和州 ，徙嶽州 ，繼貶濮州團練副使，安置汀州 。 四年 ，歸潤而卒，年六十一 。

自熙寧以來 四十年 ，大臣更用事，邪正相軋，黨論屢起，肇身更其間，數不合。兄布與韓忠彥並相，日夕傾危之。肇既居外，移書告之曰： 「 兄方得君，當引用善人，翊正道，以杜惇、卞複起之萌。而數月以來，所謂端人起士，繼跡去朝，所進以為輔佐、侍從、台諫，往往皆前日事惇、卞者。 一旦勢異今日，必首引之以為固位計，思之可為慟哭。比來主意已移，小人道長。進則必論元祐人於帝前，退則盡排元祐者于要路。異時惇、卞縱未至， 一蔡京足以兼 二人 ，可不深慮。 」布不能從。未幾，京得政，布與肇俱不免。

肇天資仁厚，而容貌端嚴。自少力學，博覽經傳， 為文溫潤有法 。 更 十一州 ，類多善政。紹興初，諡曰文昭。子統，至左諫議大夫 。

論曰：劉敞博學雄文，鄰于邃古，其為考功，仁宗賜夏竦諡，上疏爭之，以為人主不可侵臣下之官；及奉詔定樂，中貴預列，又諫曰： 「 臣懼為袁盎所笑。 」此豈事君為容悅者哉。攽雖疏雋，文埒於敞。奉世克肖，世稱「 三劉 」 。 曾鞏 立言于歐陽修 、 王安石間，紆徐而不煩，簡奧而不晦，卓然自成 一家 ，可謂難矣。肇以儒者而有能吏之才。宋之中葉，文學法理，鹹精其能，若劉氏、曾氏之家學，蓋有兩漢之風焉。
"""

#
# UIMA standalone analysis engine pipeline
#
BERTIE_JAR = "/docker/bertie-uima/target/bertie-uima-0.0.1-SNAPSHOT.jar"


def index(request):
    """
    Show basic form to annotate a text by UIMA.
    """

    if request.method == 'POST':
        form = TextAnnotationForm(request.POST)
        if form.is_valid():

            text = form.cleaned_data['text']
            f = tempfile.NamedTemporaryFile(delete=False)
            f.write(text.encode('utf-8'))
            f.close()

            error_msg = ''
            # Call UIMA analysis engine
            result = subprocess.call(["/usr/bin/java", "-Dfile.encoding=UTF-8", "-jar", BERTIE_JAR,
                                      "--plain", "--file", f.name])
            if result == -1:
                error_msg = "UIMA error"

            # Read result back in
            f2 = open(f.name, 'r')
            result = f2.read().decode('utf-8')

            textAnnotation = TextAnnotation()
            textAnnotation.text = result
            textAnnotation.text_type = "prosa"
            textAnnotation.save()

            os.unlink(f.name)

            return HttpResponseRedirect(reverse(
                                        'annotate.views.show_annotated',
                                        args=(textAnnotation.id,)))
    else:
        form = TextAnnotationForm(initial={'text': INITIAL_TEXT})

    data = {'form': form, }
    return render_to_response('annotate/index.html', data, context_instance=RequestContext(request))


def show_annotated(request, uima_id):
    """
    Show previously annotated UIMA result.
    """

    try:
        uima = TextAnnotation.objects.get(pk=int(uima_id))
        result = uima.text
    except:
        result = ''

    # TODO: catch XMLSyntaxError
    # XSLT transform result
    q = xmlmap.load_xmlobject_from_string(result.encode("utf-8"), xmlclass=RocheTEI)
    result = q.body.xsl_transform(xsl=XSL_TRANSFORM_1).serialize()

    # TODO: need an other template...
    data = {'tei_documents': [q], 'tei_transform': result, 'max_juan': 0, }
    return render_to_response('browser/text_view.html', data, context_instance=RequestContext(request))


def annotated_download(request, uima_id, file_format):
    try:
        uima = TextAnnotation.objects.get(pk=int(uima_id))
    except:
        pass

    if file_format == 'tei':
        response = HttpResponse(content_type='text/plain')
        response['Content-Disposition'] = 'attachment; filename="{}.xml"'.format("001")
        response.write(uima.text)
    else:
        response = HttpResponse(content_type='text/plain')

    return response


def annotate_text(request, text, function, lemma, juan=-1):
    """
    Annotate a single text. Run UIMA through a remote procedure call.
    """
    from .models import Annotation

    collection_path = None

    #
    # Find the collection path this text belongs to
    #
    os.chdir('/docker/dublin-store/')
    for (dirpath, dirnames, filenames) in os.walk(u'浙江大學圖書館'):
        if dirpath.endswith(unicode(text)):
            collection_path = '/docker/dublin-store/' + dirpath
            break

    #
    # RPC UIMA worker
    #
    uima_response = {}
    uima_response['response'] = None
    uima_corr_id = str(uuid.uuid4())
    uima_body = json.dumps({'text': text,
                            'function': function,
                            'collection_path': collection_path,
                            'juan': juan,
                            'lemma': lemma})

    def uima_on_response(channel, method, props, body):
        if uima_corr_id == props.correlation_id:
            uima_response['response'] = body

    uima_connection = BlockingConnection(ConnectionParameters(host=RABBITMQ_SERVER))
    uima_channel = uima_connection.channel()
    uima_result = uima_channel.queue_declare(exclusive=True)
    uima_callback_queue = uima_result.method.queue
    uima_channel.basic_consume(uima_on_response, no_ack=True, queue=uima_callback_queue)
    uima_channel.basic_publish(exchange='',
                               routing_key='uima_worker',
                               properties=BasicProperties(reply_to=uima_callback_queue,
                                                          content_type='application/json',
                                                          correlation_id=uima_corr_id, ),
                               body=uima_body)

    while uima_response['response'] is None:
        uima_connection.process_data_events()

    response = uima_response['response']
    if response == 'ERROR':
        pass

    # Invalidate page?
    # TODO

    annotation = Annotation()
    annotation.tei_tag = function
    annotation.lemma = lemma
    annotation.ip = request.META['REMOTE_ADDR']
    annotation.save()

    return HttpResponse(response)
