{"version":3,"sources":["inline-editor/actions/index.mjs","inline-editor/utils/inlineDecorator.mjs","actions/index.js","inline-editor/utils/jsonp.mjs","inline-editor/render/hljs.mjs","inline-editor/render/mce.js","inline-editor/utils/mcl-preprocessor.mjs","inline-editor/utils/render.mjs","inline-editor/render/mermaid.mjs","inline-editor/components/Line.js","inline-editor/components/Lines.js","components/InstantSearch.js","inline-editor/render/mce3/render-base.js","App.js","components/List.js","components/LoginButton.js","components/Search.js","components/ModalList.js","components/Controller.js","inline-editor/reducers/lines.js","inline-editor/reducers/cursor.js","reducers/items.js","reducers/loginButton.js","reducers/search.js","reducers/instantSearch.js","reducers/modalList.js","reducers/popupMenu.js","reducers/index.js","index.js","../node_modules/moment-mini/locale sync /^/.*$","inline-editor/render/mce3/mcl.js","inline-editor/render/mce3/gin.js","inline-editor/render/mce3/mt.js","inline-editor/render/mce3/render-svg.js"],"names":["previewLine","name","no","preview","type","changeLine","text","deleteLine","insertLine","selectLine","selected","deselectAll","clearAll","setCursor","row","col","dirty","setReadOnly","setReadWrite","setTitle","title","create","pkg","all","API_SERVER","process","newPiece","kind","s","body","capture","targets","offset","minPos","minTarget","forEach","target","index","indexOf","pos","parse","inner","level","out","isList","search","m","match","length","push","slice","cap","concat","capPos","endPos","htmlEncode","user","keywords","tmp","list","cmd","remain","math","v","Array","isArray","split","delimiter","url","label","result","evaluate","e","console","log","k","notFound","undefined","find","keyword","count","replace","Error","project","page","decodeURIComponent","join","insertItem","item","clearItem","logined","updateMessage","message","error","updateKeyword","updateResults","results","updateInstantResults","clearInstantResults","modalListUp","modalListDown","modalListUpdateProviders","providers","modalListUpdateList","modalListUpdateQuery","query","modalListOpen","modalListClose","showPopupMenu","left","top","hidePopupMenu","updatePopupMenu","items","jsonp","src","f","window","data","script","document","createElement","async","appendChild","hljsRender","hljs","highlightAuto","value","MCL","require","RenderBase","RenderSVG","globalIncludeCache","extractBlocks","blockBody","blockType","inBlock","blocks","l","parts","escapeHTML","choice","Math","floor","random","parseBlock","isBlock","lines","getLines","firstLine","lastPart","isTyped","Render","global","dispatch","blockInfo","ret","scope","line","mode","mermaidRender","preprocess","map","fetch","encodeURIComponent","fetchFile","json","mceSources","filter","b","Promise","then","source","mcl","mce","MCE","createScope","bindVariable","mouseX","mouseY","preProcess","run","sout","p","SimpleParser","r","RendererSVG","rout","render","svgData","draw","mceRender","svg","hilights","n","parseInt","URL","lineSplit","hash","startLine","endLine","pathSplit","pathname","repository","branch","file","rawFileURL","escapeUrl","response","ok","reject","status","statusText","snippet","outLines","numberedLine","includes","sendSearch","resp","o","sort","a","ad","Date","modTime","getTime","content","cover","id","i","sendSearchSchedule","priority","year","month","day","mark","number","date","show","today","setHours","setMinutes","setSeconds","setMilliseconds","cos","PI","lineNo","queue","Object","values","command","shift","getDetailList","pages","description","newResult","pageNameSet","Set","has","add","setTimeout","showList","lineStr","fname","toString","html","twttr","widgets","load","j","getCursorPos","numLines","mermaidAPI","elementId","preRenderedElement","getElementById","innerHTML","parentNode","removeChild","svgCode","str","Line","props","dirtyByKeyDown","rows","send","bind","keyHandler","clickHandler","allKeywords","this","scrollHeight","onChange","onUpdate","matchIndent","keyCode","onTab","shiftKey","preventDefault","onUp","selectionStart","onDown","selectionEnd","onLeftUp","onEnter","update","isTabEvent","indent","onBS","onClick","loadingComponent","trigger","dataProvider","token","keys","externalKeywords","links","toLowerCase","component","entity","output","allowWhitespace","className","data-lineno","style","display","isFocus","ref","height","wrap","onKeyDown","dangerouslySetInnerHTML","__html","marginLeft","refs","rawInput","textareaRef","focus","that","setSelectionRange","column","onRefreshed","prev","updateFocus","React","Component","Lines","key","calcFocus","cursor","editable","calcClassName","calcIndent","context","onMagic","onBSfunc","makeGlobal","ownProps","LinesContainer","connect","state","upText","pop","firstPart","downText","lastLineFlag","num","min","listMatch","t1","t2","pretext","t","InstantSearch","out2","sorter","href","data-jump","data-id","alt","pathData","Affine","arguments","prototype","ls","proc","mul","next","dist","x","y","sqrt","scale","calc","ans","clone","module","exports","App","backgroundColor","fontSize","loginButton","login","onLoginClick","onLogoutClick","isError","onNewDiary","onDelete","onNewJunk","onDebug","opts","meta","postPage","savePromise","popupMenu","link","rel","instantSearch","onUpdateKeyword","onSearch","rightCursor","rightLines","rightInstantSearch","sideLines","sideCursor","modalList","onSelectList","targetLine","onRename","sendRename","onClose","onModalListClose","AppContainer","from","to","location","inline","nextText","previousMeta","previousOpts","newText","history","pushState","unshift","assign","rawLines","lastUpdate","image","List","LoginButton","Search","submit","change","onSubmit","ModalList","queryRef","createRef","phase","current","scrollIntoView","appElement","isOpen","onModalQueryChange","providerIndex","ModalListContainer","provider","viewList","mimage","product_title","product_main_image_url","promotion_link","Controller","lineIndex","newState","action","splice","createFilteredReducer","reducerFunction","reducerPredicate","isInitializationCall","combineReducers","store","createStore","rootReducer","preAnalysisResult","loadLine","getOpts","FormData","append","req","Request","method","credentials","headers","sendSimilar","collection","arg","noCache","sendSearchCache","loadList","getList","nameList","batch","initialize","startOnLoad","theme","detailList","getKeywords","loginCheck","getExternalKeywords","catch","loadPage","isMain","getPage","is","grepLines","resultMap","grepToInstantSearch","analysis","addEventListener","rightTo","srcElement","dataset","jumpTo","jump","rect","getBoundingClientRect","ks","stopPropagation","onpopstate","lopts","images","getState","saving","waiting","save","timerID","uploadFile","ReactDOM","clearTimeout","waitAndSave","d","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","sendDelete","event","clipboardData","originalEvent","getAsFile","imgId","alert","findLine","classList","contains","fromNo","toNo","sel","getSelection","fromLine","anchorNode","toLine","focusNode","lineno","selectedLines","selectedSource","navigator","clipboard","writeText","some","setupSelection","webpackContext","webpackContextResolve","__webpack_require__","code","resolve","Gin","MersenneTwister","parser","Grammar","Stmnt","Cmp","Expr","Term","Fctr","Call","Def","PROGRAM","LINE","COMM","ARGLIST","ARG","Parser","RegExp","calcAction","_stack","argList","varList","block","fpush","parseFloat","vpush","pushn","callBegin","defBegin","funcCall","funcDef","prepareBlock","funcBody","cmp","vs","neq","eq","lt","gt","sub","div","mod","stack","pre","rawOut","full","lastIndex","Scope","mt","externalVar","externalVarRequest","prevScope","destroyScope","setVariable","getVariable","obj","extArgs","self","getYear","getDay","execute","apply","def","vArgList","func","op","tmpArgList","nextScope","tmpScope","max","val","initial","vClass","vMethod","imm","variable","right","VERSION","BUILD","Utils","inherit","Sub","Super","members","Traits","constructor","_super","original","extend","destination","makeTuple","tuple","isTuple","ruleName","quote","string","escape","unquote","unescape","String","\"","fn","c","any","control","octal","fromCharCode","substring","NOT_IMPLEMENTED","scanner","handler","_value","_length","start","Scanner","getIndex","setIndex","moveIndex","Match","pattern","flags","_global","ignoreCase","multiline","_re","Ref","base","_base","_name","Nothing","End","atEnd","Unary","_subject","Action","_action","_isRef","thisObject","call","ex","NO_MATCH","Repeat","_min","_max","Binary","parser1","parser2","_left","_right","Seq","match1","match2","Diff","Alt","Rule","rule","rules","_parser","ruleAction","input","tokens","Tokenizer","parseRuleAction","parseAlt","get","peek","INVALID_RULE","parseDiff","parseSeq","parseRepeat","parseAction","Infinity","parsePrimary","UNDEFINED_SYMBOL","delimiterIndex","lastIndexOf","symbol","_input","_next","INVALID_TOKEN","skip","_start","_skip","callee","_index","SPACE","NOTHING","valueOf","ANY","BLANK","EOL","NL","END","EPSILON","EPS","UINT","Number","INT","UDECIMAL","DECIMAL","UREAL","REAL","OCTAL","HEX","JS_NUMBER","CSV_STRING","JS_STRING","seed","_mt","setSeed","_mulUint32","a2","b2","_toNumber","isNaN","ceil","TypeError","_nextInt","N","M","nextInt","sup","rb","fonts","size","patternCanv","ctxTmp","ctxId","imgCache","lineWidth","fillStyle","strokeStyle","fontName","lastPoint","clipPathId","afX","affine","afY","theta","skew","theta2","tan","rotate","sin","restore","beginPath","lineTo","path","quadTo","x2","y2","arcTo","tx","ty","p0","p1","p2","d01","d12","p1a","p2a","bezierTo","x3","y3","ctx","bezierCurveTo","moveTo","closePath","fill","clipPath","stroke","clip","resetClip","m11","m12","m21","m22","dx","dy","transform","resetAffine","fillText","fontNameWithQuote","strokeText","blur","shadowBlur","bs","shadowColor","fs","ss","dlw","lw","font","radialGrad","x0","y0","r0","x1","y1","r1","grad","createRadialGradient","linearGrad","createLinearGradient","cs","addColorStop","fsGrad","ssGrad","createImage","w","h","width","setTarget","getContext","setTransform","clearRect","lineJoin","miterLimit","textBaseline","drawImage","drawExtImage","img","Image"],"mappings":"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","file":"static/js/main.4c98afd1.chunk.js","sourcesContent":["\r\nexport const previewLine = (name, no, preview) => ({\r\n name,\r\n type: 'PREVIEW_LINE',\r\n preview,\r\n no,\r\n})\r\n\r\nexport const changeLine = (name, no, text, preview) => ({\r\n name,\r\n type: 'CHANGE_LINE',\r\n text,\r\n preview,\r\n no,\r\n})\r\n\r\nexport const deleteLine = (name, no, text) => ({\r\n name,\r\n type: 'DELETE_LINE',\r\n text,\r\n no,\r\n})\r\n\r\nexport const insertLine = (name, no, text, preview) => ({\r\n name,\r\n type: 'INSERT_LINE',\r\n text,\r\n preview,\r\n no,\r\n})\r\n\r\nexport const selectLine = (name, no, selected) => ({\r\n name,\r\n type: 'SELECT_LINE',\r\n no,\r\n selected,\r\n})\r\n\r\nexport const deselectAll = (name) => ({\r\n name,\r\n type: 'DESELECT_ALL',\r\n})\r\n\r\n\r\nexport const clearAll = (name) => ({\r\n name,\r\n type: 'CLEAR_ALL',\r\n})\r\n\r\n\r\nexport const setCursor = function(name, row, col, dirty) {\r\n return ({\r\n name,\r\n type: 'SET_CURSOR',\r\n row,\r\n col,\r\n dirty,\r\n})\r\n}\r\n\r\nexport const setReadOnly = (name) => ({\r\n name,\r\n type: 'SET_READONLY',\r\n})\r\n\r\nexport const setReadWrite = (name) => ({\r\n name,\r\n type: 'SET_READWRITE',\r\n})\r\n\r\nexport const setTitle = (name, title) => ({\r\n name,\r\n type: 'SET_TITLE',\r\n title,\r\n})\r\n\r\n","import pkg from 'mathjs'\r\nconst {create,all} = pkg\r\n\r\nconst API_SERVER=process.env.REACT_APP_API_SERVER\r\n\r\n/*\r\n {{link url}}\r\n {{img img}}\r\n */\r\n function newPiece(kind, s){\r\n return {kind: kind, body: s};\r\n }\r\n\r\n // multi-target indexOf\r\n // return minimum index and target\r\n function capture(body, targets, offset){\r\n var minPos = -1;\r\n var minTarget = \"\";\r\n targets.forEach(function(target){\r\n var index = body.indexOf(target, offset);\r\n if(index !== -1){\r\n if(minPos === -1 || minPos > index){\r\n minPos = index;\r\n minTarget = target;\r\n }\r\n }\r\n });\r\n return {pos: minPos, target: minTarget}\r\n }\r\n\r\n export function parse(body){\r\n var pos = 0;\r\n function inner(level){\r\n var out = [];\r\n let isList = (body.search(/\\s*- /) === 0);\r\n if(pos === 0 && isList){\r\n let m = body.match(/^(\\s*)- /)\r\n pos += m[0].length - 1\r\n out.push(newPiece(\"list\", body.slice(0, pos)));\r\n }\r\n while(true){\r\n var cap;\r\n if(level === 0){\r\n cap = capture(body, [\"{{\",\"}}\", \"[\", \"]\", \"http://\", \"https://\"], pos);\r\n }else{\r\n cap = capture(body, [\"{{\",\"}}\",\"[\", \"]\"], pos);\r\n }\r\n if(cap.target === \"{{\"){\r\n out.push(newPiece(\"text\", body.slice(pos, cap.pos)));\r\n pos = cap.pos + \"{{\".length;\r\n out.push([\"command\"].concat(inner(level + 1)));\r\n }else if(cap.target === \"}}\"){\r\n out.push(newPiece(\"command\", body.slice(pos, cap.pos)));\r\n pos = cap.pos + \"}}\".length;\r\n if(level > 0){\r\n break;\r\n }\r\n }else if(cap.target === \"[\"){\r\n let capPos = cap.pos;\r\n out.push(newPiece(\"text\", body.slice(pos, cap.pos)));\r\n pos = cap.pos + \"[\".length;\r\n out.push([\"wikilink\"].concat(inner(level + 1)));\r\n if(capPos === 0){\r\n switch(body[pos]){\r\n case '!':\r\n case '@':\r\n case '~':\r\n case '-':\r\n case '+':\r\n out.push(newPiece(\"schedule-active\", body.slice(pos, pos + 1)));\r\n pos = pos + \".\".length;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }else if(cap.target === \"]\"){\r\n out.push(newPiece(\"text\", body.slice(pos, cap.pos)));\r\n pos = cap.pos + \"]\".length;\r\n if(level > 0){\r\n break;\r\n }\r\n }else if((cap.target===\"https://\" || cap.target === \"http://\")){\r\n if(pos !== cap.pos){\r\n out.push(newPiece(\"text\", body.slice(pos, cap.pos)));\r\n }\r\n var endPos = capture(body, [\" \",\"\\r\", \"\\n\"], cap.pos + cap.target.length);\r\n if(endPos.pos !== -1){\r\n out.push(newPiece(\"url\", body.slice(cap.pos, endPos.pos)));\r\n pos = endPos.pos;\r\n }else{\r\n out.push(newPiece(\"url\", body.slice(cap.pos, body.length)));\r\n pos = body.length;\r\n break;\r\n }\r\n }else{\r\n out.push(newPiece(\"text\", body.slice(pos, body.length)));\r\n pos = body.length;\r\n break;\r\n }\r\n }\r\n return out;\r\n };\r\n return inner(0);\r\n }\r\n\r\n export function htmlEncode(body, user, keywords){\r\n var out = [];\r\n var tmp;\r\n var list;\r\n var cmd, remain;\r\n const math = create(all, {})\r\n body.forEach(function(v){\r\n if(Array.isArray(v)){\r\n switch(v[0]){\r\n case \"command\":\r\n tmp = htmlEncode(v.slice(1), user, keywords);\r\n list = tmp.split(/\\s+/, 2); // cmd, remain...\r\n\r\n var m = tmp.match(/\\s+/);\r\n if(m){\r\n var delimiter = m[0];\r\n cmd = tmp.slice(0, m.index)\r\n remain = tmp.slice(m.index + delimiter.length)\r\n }else{\r\n cmd = \"\";\r\n }\r\n\r\n switch(cmd){\r\n // inline commands\r\n case \"link\":\r\n out.push('{{link ')\r\n let m = remain.match(/\\s+/)\r\n var url\r\n var label\r\n if(m){\r\n let delimiter = m[0];\r\n url = remain.slice(0, m.index)\r\n label = remain.slice(m.index + delimiter.length)\r\n }\r\n out.push(url) // url\r\n out.push(\" \"+label+\" \") // label\r\n out.push('}} ')\r\n break\r\n case \"img\":\r\n out.push('{{')\r\n out.push('img')\r\n if(remain.indexOf(\"http://\")===0 || remain.indexOf(\"https://\")===0){\r\n out.push(' ')\r\n }else{\r\n out.push(' ')\r\n }\r\n out.push('}} ')\r\n break;\r\n case \"calc\":\r\n out.push(\"{{\")\r\n out.push(tmp);\r\n out.push(\"}}\")\r\n try{\r\n let result = math.evaluate(remain);\r\n out.push(\" = \" + result + \" \")\r\n }catch(e){\r\n console.log(\"math error: \" + list[1], e)\r\n }\r\n break;\r\n default:\r\n out.push(\"{{\")\r\n out.push(tmp);\r\n out.push(\"}}\")\r\n }\r\n break;\r\n case \"wikilink\":\r\n tmp = htmlEncode(v.slice(1), user, keywords);\r\n let notFound = true;\r\n let k\r\n if(keywords !== undefined){\r\n k = keywords.find((s) => s.keyword === tmp)\r\n }\r\n if(k){\r\n notFound = (k.count <= 1)\r\n }\r\n out.push(\"\")\r\n out.push(\"[ \")\r\n out.push(\"\" + tmp + \" \");\r\n out.push(\"] * \")\r\n out.push(\" \")\r\n break;\r\n default:\r\n throw new Error(\"unsupported kind: \" + v.kind)\r\n }\r\n }else{\r\n switch(v.kind){\r\n case \"command\":\r\n out.push(\"\" + v.body + \"\");\r\n break;\r\n case \"list\":\r\n out.push(v.body.replace(/ {2}/g, \" \"));\r\n break;\r\n case \"text\":\r\n out.push(v.body);\r\n break;\r\n case \"schedule-active\":\r\n out.push(''+v.body+' ');\r\n break;\r\n\r\n case \"url\":\r\n // todo: escape\r\n if(v.body.indexOf(\"https://scrapbox.io/\") === 0){\r\n let m = v.body.match(/https:\\/\\/scrapbox\\.io\\/([^/]*)\\/(.*)/)\r\n console.log(m)\r\n let project = m[1]\r\n let page = decodeURIComponent(m[2])\r\n out.push(\"[\" + project + \"/\" + page + \"] \" + v.body + \" \");\r\n }else{\r\n out.push(\"\" + v.body + \" \");\r\n }\r\n break;\r\n default:\r\n throw new Error(\"unsupported kind: \" + v.kind);\r\n }\r\n }\r\n });\r\n return out.join(\"\");\r\n }\r\n\r\n","export const insertItem = (item) => ({\r\n type: 'INSERT_ITEM',\r\n item,\r\n})\r\nexport const clearItem = (item) => ({\r\n type: 'CLEAR_ITEM',\r\n item,\r\n})\r\n\r\nexport const logined = (user) => ({\r\n type: 'LOGINED',\r\n user: user,\r\n})\r\nexport const updateMessage = (message) => ({\r\n type: 'UPDATE_MESSAGE',\r\n message: message,\r\n})\r\nexport const error = (message) => ({\r\n type: 'ERROR',\r\n})\r\n\r\n\r\nexport const updateKeyword = (keyword) => ({\r\n type: 'SEARCH_UPDATE_KEYWORD',\r\n keyword: keyword,\r\n})\r\n\r\nexport const updateResults = (results) => ({\r\n type: 'SEARCH_UPDATE_RESULTS',\r\n results: results,\r\n})\r\nexport const updateInstantResults = (name, keyword, results) => ({\r\n name,\r\n type: 'INSTANT_SEARCH_UPDATE_RESULT',\r\n keyword: keyword,\r\n results: results,\r\n})\r\nexport const clearInstantResults = (name) => ({\r\n name,\r\n type: 'INSTANT_SEARCH_CLEAR',\r\n})\r\n\r\nexport const modalListUp = () => ({\r\n type: 'MODAL_LIST_UP',\r\n})\r\nexport const modalListDown = () => ({\r\n type: 'MODAL_LIST_DOWN',\r\n})\r\nexport const modalListUpdateProviders = (providers) => ({\r\n type: 'MODAL_LIST_UPDATE_PROVIDERS',\r\n providers: providers\r\n})\r\nexport const modalListUpdateList = (list) => ({\r\n type: 'MODAL_LIST_UPDATE_LIST',\r\n list: list\r\n})\r\nexport const modalListUpdateQuery = (query) => ({\r\n type: 'MODAL_LIST_UPDATE_QUERY',\r\n query: query\r\n})\r\nexport const modalListOpen = (no, pos, text) => ({\r\n type: 'MODAL_LIST_OPEN',\r\n no: no,\r\n pos: pos,\r\n text: text,\r\n})\r\nexport const modalListClose = () => ({\r\n type: 'MODAL_LIST_CLOSE',\r\n})\r\nexport const showPopupMenu = (left, top) => ({\r\n type: 'POPUP_SHOW',\r\n left: left,\r\n top: top,\r\n})\r\nexport const hidePopupMenu = (left, top) => ({\r\n type: 'POPUP_HIDE',\r\n left: left,\r\n top: top,\r\n})\r\nexport const updatePopupMenu = (items) => ({\r\n type: 'POPUP_UPDATE_ITEMS',\r\n items: items,\r\n})\r\n\r\n","export const jsonp = (name, src, f) => {\r\n window[name] = function(data){\r\n f(data);\r\n }\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.async = true;\r\n script.src = src;\r\n document.body.appendChild(script);\r\n}\r\n\r\n","import hljs from 'highlight.js'\r\n\r\nexport const hljsRender = (no, text) => {\r\n return '
'+hljs.highlightAuto(text.join(\"\\n\")).value+' '\r\n}\r\n","var MCL = require(\"./mce3/mcl.js\")\r\nvar RenderBase = require(\"./mce3/render-base.js\")\r\nvar RenderSVG = require(\"./mce3/render-svg.js\")\r\n\r\nexport function mceRender(text, f){\r\n var globalTimer = 0;\r\n var mouseX,mouseY;\r\n //var fonts = new RenderBase.Fonts();\r\n //var sources = new Sources();\r\n // === Prelude ===\r\n var prelude = (`\r\n!sqrt = \\\\(n){\r\n eval(\"Math\",\"sqrt\",n)\r\n};\r\n!sin = \\\\(n){\r\n eval(\"Math\",\"sin\",n * 3.1415 * 2)\r\n};\r\n!cos = \\\\(n){\r\n eval(\"Math\",\"cos\",n * 3.1415 * 2)\r\n};\r\n!tan = \\\\(n){\r\n eval(\"Math\",\"tan\",n * 3.1415 * 2)\r\n};\r\n!atan2 = \\\\(y,x){\r\n eval(\"Math\", \"atan2\", y, x)/(3.1415*2)\r\n};\r\n\r\n\r\n\r\n!floor = \\\\(n){\r\n eval(\"Math\",\"floor\",n)\r\n};\r\n\r\n!save = \\\\(){\r\n write(\"save\");\r\n evalAllExtArgs();\r\n write(\"restore\");\r\n};\r\n!lw = \\\\(size){\r\n save(){\r\n write(\"lw \" + size);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!blur = \\\\(size){\r\n save(){\r\n write(\"blur \" + size);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!bs = \\\\(c){\r\n save(){\r\n write(\"bs \" + c);\r\n evalAllExtArgs();\r\n };\r\n};\r\n\r\n!fs = \\\\(c){\r\n save(){\r\n write(\"fs \" + c);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!ss = \\\\(c){\r\n save(){\r\n write(\"ss \" + c);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!col = \\\\(c){\r\n save(){\r\n write(\"ss \" + c);\r\n write(\"fs \" + c);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!ssfs = \\\\(c1,c2){\r\n save(){\r\n write(\"ss \" + c1);\r\n write(\"fs \" + c2);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!cs = \\\\(pos, col){\r\n write(\"cs \" + pos + \" \" + col);\r\n};\r\n!rgrad = \\\\(x0,y0,r0,x1,y1,r1){\r\n write(\"radialGrad \" + x0 + \" \" + y0 + \" \" + r0 + \" \" + x1 + \" \" + y1 + \" \" + r1);\r\n evalAllExtArgs();\r\n};\r\n!lgrad = \\\\(x0,y0,x1,y1){\r\n write(\"linearGrad \" + x0 + \" \" + y0 + \" \" + x1 + \" \" + y1);\r\n evalAllExtArgs();\r\n};\r\n!fsgrad = \\\\(){\r\n save(){\r\n evalExtArg(0);\r\n write(\"fsGrad\");\r\n block(\"a\"){\r\n !a = 1;\r\n loop(extArgsLength() - 1){\r\n evalExtArg(a);\r\n !a = a + 1;\r\n }\r\n }\r\n };\r\n};\r\n!ssgrad = \\\\(){\r\n save(){\r\n evalExtArg(0);\r\n write(\"ssGrad\");\r\n block(\"a\"){\r\n !a = 1;\r\n loop(extArgsLength() - 1){\r\n evalExtArg(a);\r\n !a = a + 1;\r\n }\r\n }\r\n };\r\n};\r\n!skew = \\\\(t,t2){\r\n save(){\r\n write(\"skew \" + t + \" \" + t2);\r\n evalAllExtArgs();\r\n };\r\n};\r\n\r\n!rotate = \\\\(t){\r\n save(){\r\n write(\"rotate \" + t);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!scale = \\\\(w,h){\r\n if(not(h)){\r\n !h = w;\r\n };\r\n save(){\r\n write(\"scale \" + w + \" \" + h);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!shift = \\\\(x,y){\r\n save(){\r\n write(\"shift \" + x + \" \" + y);\r\n evalAllExtArgs();\r\n };\r\n};\r\n!outerFig = 1;\r\n!fig = \\\\(closed){\r\n write(\"beginPath\");\r\n !outerFig = 0;\r\n evalAllExtArgs();\r\n !outerFig = 1;\r\n if(closed){\r\n write(\"closePath\");\r\n };\r\n write(\"fill\");\r\n write(\"stroke\");\r\n};\r\n!blockClip = \\\\(closed){\r\n write(\"beginPath\");\r\n !outerFig = 0;\r\n evalExtArg(0);\r\n !outerFig = 1;\r\n if(closed){\r\n write(\"closePath\");\r\n };\r\n write(\"clip\");\r\n evalExtArg(1);\r\n write(\"resetClip\");\r\n};\r\n\r\n!autoFig = \\\\(){\r\n if(outerFig){\r\n write(\"beginPath\");\r\n };\r\n evalAllExtArgs();\r\n if(outerFig){\r\n write(\"closePath\");\r\n write(\"fill\");\r\n write(\"stroke\");\r\n };\r\n}\r\n!rect = \\\\(){\r\n autoFig(){\r\n write(\"moveTo -0.5 -0.5\");\r\n write(\"lineTo 0.5 -0.5\");\r\n write(\"lineTo 0.5 0.5\");\r\n write(\"lineTo -0.5 0.5\");\r\n };\r\n};\r\n!rrect = \\\\(){\r\n autoFig(){\r\n write(\"moveTo -0.5 -0.5\");\r\n write(\"lineTo -0.5 0.5\");\r\n write(\"lineTo 0.5 0.5\");\r\n write(\"lineTo 0.5 -0.5\");\r\n };\r\n};\r\n\r\n!xy0 = \\\\(x,y){\r\n write(\"moveTo \" + x + \" \" + y);\r\n}\r\n!xy = \\\\(x,y){\r\n write(\"lineTo \" + x + \" \" + y);\r\n}\r\n!grid = \\\\(xx,yy){\r\n block(\"aa\",\"bb\"){\r\n !aa = 0;\r\n !bb = 0;\r\n loop(xx){\r\n !bb = 0;\r\n !aa = aa + 1;\r\n loop(yy){\r\n !bb = bb + 1;\r\n shift(aa - xx/2 - 0.5 ,bb - yy/2 - 0.5){\r\n evalAllExtArgs();\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\n!flower = \\\\(n){\r\n block(\"a\"){\r\n !a = 0;\r\n loop(n){\r\n rotate(a/n*2){\r\n evalAllExtArgs();\r\n }\r\n !a = a + 1;\r\n }\r\n }\r\n}\r\n\r\n!text = \\\\(s){\r\n scale(0.1){\r\n write(\"fillText \" + s);\r\n write(\"strokeText \" + s);\r\n }\r\n}\r\n!fillText = \\\\(s){\r\n write(\"fillText \" + s);\r\n}\r\n!strokeText = \\\\(s){\r\n write(\"strokeText \" + s);\r\n}\r\n!rgb = \\\\(r,g,b){\"rgb(\" + r + \",\" + g + \",\" + b + \")\"};\r\n!rgba = \\\\(rr,gg,bb,aa){\"rgba(\" + rr + \",\" + gg + \",\" + bb + \",\" + aa + \")\"};\r\n\r\n!poly = \\\\(n, p){\r\n block(\"ploya\"){\r\n !polya = 0;\r\n autoFig(0){\r\n loop(n){\r\n !polya = polya + 1;\r\n rotate((polya*p)/n * 2){\r\n write(\"lineTo 0 0.5\");\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\n!apoly = \\\\(mode,size){\r\n block(\"r2\",\"a\"){\r\n scale(0.3){\r\n !r2 = 1/cos(1/mode/2)\r\n fig(1){\r\n !a = 0\r\n write('moveTo ' + cos(-1/mode/2) + ' ' + sin(-1/mode/2))\r\n loop(mode){\r\n write('arcTo' + ' ' + r2*cos((a*2)/mode/2) + ' ' + r2*sin((a*2)/mode/2) + ' ' + cos((a*2+1)/mode/2) + ' ' + sin((a*2+1)/mode/2) + ' ' + size)\r\n !a = a + 1\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n!font = \\\\(name){\r\n save(){\r\n write(\"font \" + name);\r\n evalAllExtArgs();\r\n }\r\n}\r\n!circle = \\\\(s){\r\n block(\"polyq\",\"n\",\"r2\"){\r\n if(not(s)){\r\n !s = 1;\r\n }\r\n scale(s){\r\n !polya = 0;\r\n !n = 8;\r\n !r2 = 0.5/cos(1/n/2);\r\n autoFig(){\r\n write('moveTo 0.5 0')\r\n loop(n){\r\n !x1 = 0.5 * cos((polya+1) / n);\r\n !y1 = 0.5 * sin((polya+1) / n);\r\n !x2 = r2 * cos(polya / n + 1 / n / 2);\r\n !y2 = r2 * sin(polya / n + 1 / n / 2);\r\n\r\n write(\"quadTo \" + x2 + \" \" + y2 + \" \" + x1 + \" \" + y1);\r\n !polya = polya + 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n!rcircle = \\\\(s){\r\n block(\"polyq\",\"n\",\"r2\"){\r\n if(not(s)){\r\n !s = 1;\r\n }\r\n scale(s){\r\n !polya = 0;\r\n !n = 8;\r\n !r2 = 0.5/cos(1/n/2);\r\n autoFig(){\r\n write('moveTo 0.5 0')\r\n loop(n){\r\n !x1 = 0.5 * cos((n-polya-1) / n);\r\n !y1 = 0.5 * sin((n-polya-1) / n);\r\n !x2 = r2 * cos((n-polya) / n - 1 / n / 2);\r\n !y2 = r2 * sin((n-polya) / n - 1 / n / 2);\r\n\r\n write(\"quadTo \" + x2 + \" \" + y2 + \" \" + x1 + \" \" + y1);\r\n !polya = polya + 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n`);\r\n\r\n var draw=function(s){\r\n var mcl = new MCL.MCL();\r\n var mce = new MCL.MCE();\r\n //mce.externalVar = externalVars;\r\n mce.createScope();\r\n mce.bindVariable('t', globalTimer);\r\n mce.bindVariable('mx', mouseX);\r\n mce.bindVariable('my', mouseY);\r\n\r\n // concat prelude\r\n s = prelude + mcl.preProcess(s);\r\n var out = mcl.parse(s);\r\n mce.run(out); // TODO: return value is no use\r\n var sout = mce.out;\r\n var p = new RenderBase.SimpleParser();\r\n var r = new RenderSVG.RendererSVG(/*fonts*/ null);\r\n var rout = p.parse(sout);\r\n r.render(rout, 400);\r\n var svgText = '' + r.svgData.join(\"\\n\")+ \" \"\r\n return svgText\r\n }\r\n\r\n f(draw(text));\r\n}\r\n","const API_SERVER=process.env.REACT_APP_API_SERVER\nlet globalIncludeCache = {}\n\nfunction extractBlocks(s){\n let inBlock = false\n let blockBody\n let blockType\n let blocks = []\n s.split(\"\\n\").forEach((l) => {\n if(inBlock){\n if(l === \"<<\"){\n inBlock = false\n blocks.push({blockType: blockType, body: blockBody})\n }else{\n blockBody += \"\\n\" + l\n }\n }else{\n let parts = l.split(/\\s+/)\n if(parts[0] == \">>\"){\n inBlock = true\n blockBody = \"\"\n blockType = parts[1]\n }\n }\n })\n return blocks\n}\n\nexport async function preprocess(s, user){\n let ret = s.split(\"\\n\").map(async(l) => {\n if(l.indexOf(\"#include(\") == 0){\n let parts = l.split(/[\"]/)\n let name = parts[1]\n let blocks;\n if(globalIncludeCache[name] == undefined){\n const fetchFile = await fetch(API_SERVER + \"/page/\" + user + \"/\" + encodeURIComponent(name))\n const page = await fetchFile.json()\n blocks = extractBlocks(page.body)\n globalIncludeCache[name] = blocks\n }else{\n blocks = globalIncludeCache[name]\n }\n let mceSources = blocks.filter((b) => b.blockType==\"mce\").map((b) => preprocess(b.body, user), \"\")\n\n return (await Promise.all(mceSources)).join(\"\\n\")\n }else{\n return l\n }\n })\n console.log(ret)\n let l = await Promise.all(ret)\n console.log(l)\n return l.join(\"\\n\")\n}\n","import {hljsRender} from '../render/hljs.mjs'\r\n// below incompatible to console mode\r\nimport {mermaidRender} from '../render/mermaid.mjs'\r\nimport {mceRender} from '../render/mce.js' // this is not module\r\nimport {parse, htmlEncode} from '../utils/inlineDecorator.mjs'\r\nimport {previewLine} from '../actions/index.mjs'\r\nimport {jsonp} from './jsonp.mjs'\r\nimport {preprocess} from './mcl-preprocessor.mjs'\r\nimport pkg from 'mathjs'\r\nconst {create, all} = pkg\r\n\r\nconst API_SERVER=process.env.REACT_APP_API_SERVER\r\n\r\nfunction escapeHTML(s, user, list){\r\n return htmlEncode(parse(s.replace(/&/g,\"&\").replace(//g,\">\")), user, list);\r\n}\r\n\r\nconst choice = (l) => {\r\n let r = Math.floor(Math.random() * l.length)\r\n return l[r]\r\n}\r\n\r\nexport const parseBlock = (text) => {\r\n if(isBlock(text)){\r\n let lines = getLines(text);\r\n let firstLine = lines[0];\r\n let lastPart = lines.slice(1);\r\n let parts = firstLine.split(/\\s+/);\r\n if(parts[0] === \">>\"){\r\n return {\r\n isTyped: true,\r\n type: parts[1],\r\n body: lastPart,\r\n }\r\n }\r\n return {\r\n isTyped: false,\r\n type: null,\r\n body: text,\r\n }\r\n }\r\n throw new Error(text + \"is not block\")\r\n}\r\n\r\nexport const Render = (name, no, text, global, dispatch) => {\r\n // TODO: sanitize!!\r\n if(isBlock(text)){\r\n let blockInfo = parseBlock(text)\r\n let lastPart = blockInfo.body\r\n\r\n let ret = \"\";\r\n if(blockInfo.isTyped){\r\n switch(blockInfo.type){\r\n case \"calc\":\r\n const math = create(all, {})\r\n const scope = {}\r\n ret += \">> calc \";\r\n lastPart.forEach((line) => {\r\n try{\r\n ret += \"\" + line + '
» ' + math.evaluate(line, scope) + \"
\";\r\n }catch(e){\r\n // TODO: catch\r\n }\r\n })\r\n break;\r\n case \"pre\":\r\n ret += \">> pre \";\r\n ret += \"\" + lastPart.join(\"\\n\") + \" \";\r\n break;\r\n case \"mermaid\":\r\n if(global.mode === \"console\"){\r\n ret += \"NOT IMPLEMENT mermaid render\";\r\n }else{\r\n ret += \">> mermaid \";\r\n ret += mermaidRender(no, lastPart);\r\n }\r\n break;\r\n case \"mce\":\r\n if(global.mode === \"console\"){\r\n ret += \"NOT IMPLEMENT mce render\";\r\n }else{\r\n ret += \">> MCE \";\r\n if(lastPart){\r\n try{\r\n // TODO: slow\r\n preprocess(lastPart.join(\"\\n\"), global.user).then((source) => {\r\n try{\r\n mceRender(source, (svg) => {\r\n let s= \"\" + svg + \"
\"\r\n dispatch(previewLine(name, no, s));\r\n });\r\n }catch(e){\r\n dispatch(previewLine(name, no, \"\"+e));\r\n console.log(e)\r\n }\r\n })\r\n ret += \"mce ...\" +no+ \"
\"\r\n }catch(e){console.log(e); ret += e}\r\n }\r\n }\r\n break;\r\n\r\n case \"github\":\r\n ret += \">> github \";\r\n {\r\n let url = lastPart[0]\r\n try{\r\n let hilights = (lastPart[1]||\"\").split(\",\").map((n) => {return parseInt(n)})\r\n let target = new URL(url)\r\n const lineSplit = target.hash.split(\"-\");\r\n const startLine = (target.hash !== \"\" && parseInt(lineSplit[0].replace(\"#L\", \"\"))) || -1;\r\n const endLine = (target.hash !== \"\" && lineSplit.length > 1 && parseInt(lineSplit[1].replace(\"L\", \"\"))) || startLine;\r\n\r\n const pathSplit = target.pathname.split(\"/\");\r\n const user = pathSplit[1];\r\n const repository = pathSplit[2];\r\n const branch = pathSplit[4];\r\n const file = pathSplit.slice(5, pathSplit.length).join(\"/\");\r\n\r\n const rawFileURL = `https://raw.githubusercontent.com/${user}/${repository}/${branch}/${file}`;\r\n const escapeUrl = (\"\"+ target).replace(/&/g,\"&\").replace(//g,\">\")\r\n\r\n ret += escapeUrl;\r\n\r\n const fetchFile = fetch(rawFileURL).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n return Promise.reject(`${response.status} ${response.statusText}`);\r\n }\r\n });\r\n\r\n fetchFile.then((result) => {\r\n let snippet = result.split(/[\\r\\n]/).slice(startLine - 1, endLine);\r\n console.log(snippet)\r\n let out = \"\";\r\n out += \">> github \";\r\n out +='' + escapeUrl + ' '\r\n out += \"\"\r\n const lines = hljsRender(no, snippet).replace(/<(\\/|)pre[^>]*>/g,\"\").split(/[\\r\\n]/)\r\n let outLines = [];\r\n lines.forEach((l, n) => {\r\n const numberedLine = '' +(n + startLine) + ' ' + l\r\n if(hilights.includes(n + startLine)){\r\n outLines.push('' + numberedLine + ' ');\r\n }else{\r\n outLines.push(numberedLine);\r\n }\r\n })\r\n out += outLines.join(\"\\n\")\r\n out += \" \"\r\n dispatch(previewLine(name, no, out));\r\n });\r\n }catch(e){\r\n ret += \"error \" + e;\r\n }\r\n }\r\n break;\r\n case \"code\":\r\n ret += \">> code \";\r\n console.log(\"CODE PART\",lastPart);\r\n ret += hljsRender(no, lastPart);\r\n break;\r\n case \"img\":\r\n if(lastPart[0].indexOf(\"http://\")===0 || lastPart[0].indexOf(\"https://\")===0){\r\n ret += ' '\r\n }else{\r\n ret += ' '\r\n }\r\n break;\r\n case \"grep\":\r\n ret += \">> grep \";\r\n ret += \"\"\r\n ret += \"Query:\" + lastPart[0]\r\n ret += \"
\"\r\n global.sendSearch(lastPart[0]).then((resp) => {\r\n resp.json().then((o) => {\r\n let body = [];\r\n body.push(\">> grep "\" + lastPart[0] + \"" \")\r\n body.push(\"\")\r\n o.lines.sort((a,b) => { // sort new -> old\r\n let ad = new Date(a.modTime);\r\n let bd = new Date(b.modTime);\r\n return bd.getTime() - ad.getTime();\r\n }).forEach((v)=>{\r\n let content = \"\"\r\n if(v.cover !== \"\"){\r\n content = '
'\r\n }\r\n body.push(\"
\" + content + \"\" + v.text + \"
\")\r\n })\r\n body.push(\"
\")\r\n dispatch(previewLine(name, no, body.join(\"\\n\")));\r\n })\r\n })\r\n break;\r\n case \"randompages\":\r\n ret += \">> randompages \";\r\n ret += \"\"\r\n break;\r\n case \"pages\":\r\n ret += \">> pages \";\r\n ret += \"\"\r\n break;\r\n case \"schedule\":\r\n ret += \">> schedule \";\r\n global.sendSearchSchedule().then((resp) => {\r\n resp.json().then((o) => {\r\n\r\n let body = [];\r\n body.push(\">> schedule \")\r\n o.lines.forEach((v)=>{\r\n let m = v.text.match(/^\\[(\\d{4})-(\\d{2})-(\\d{2})\\](([@.\\-~+!])(\\d+|)|)/)\r\n v.priority = 0\r\n if(!m || m.length < 5){\r\n console.log(\"invalid schedule\", v.text)\r\n v.priority = -9999\r\n return;\r\n }\r\n console.log(m)\r\n let year = m[1]\r\n let month = m[2]\r\n let day = m[3]\r\n let mark = m[5]\r\n let number = m[6]\r\n let date = new Date(year, month -1, day, 0, 0, 0)\r\n\r\n v.date = date\r\n\r\n v.show = true\r\n v.label = \"\"\r\n let today = new Date()\r\n today.setHours(0);\r\n today.setMinutes(0);\r\n today.setSeconds(0);\r\n today.setMilliseconds(0);\r\n let oneday = 60*60*24*1000\r\n\r\n v.number = number\r\n switch(mark){\r\n case \"\": // none\r\n case \"@\": // schedule\r\n v.label = \"予定\";\r\n if(!number){\r\n number = 1;\r\n }\r\n\r\n // その日に優先度0となる その後は指定日が過ぎたら消える\r\n if(today.getTime() <= date.getTime() + oneday * (number - 1)){\r\n v.priority = Math.floor((today.getTime() - date.getTime())/oneday);\r\n }else{\r\n v.priority = -9999;\r\n v.show = false;\r\n }\r\n break;\r\n case \"!\": // deadline\r\n v.label = \"締切\";\r\n if(!number){\r\n number = 7;\r\n }\r\n\r\n if(today.getTime() >= date.getTime() - oneday * (number)){\r\n // その日に向かって上になり、当日が0、その後も優先度が上昇し続ける\r\n v.priority = Math.floor((today.getTime() - date.getTime())/oneday);\r\n }else{\r\n v.priority = -9999;\r\n }\r\n break;\r\n case \".\": // done\r\n v.label = \"完了\";\r\n v.priority = -9999;\r\n v.show = false;\r\n break;\r\n case \"-\": // note\r\n v.label = \"覚書\";\r\n if(!number){\r\n number = 7;\r\n }\r\n\r\n // その日に優先度が0となり X日かけて沈んでいく\r\n if(today.getTime() < date.getTime()){ // その日が来るまで現れない\r\n v.priority = -9999;\r\n }else{\r\n // TODO: 指定日以降は現れない\r\n\r\n v.priority = Math.floor((today.getTime() - date.getTime())/oneday);\r\n }\r\n break;\r\n case \"~\": // up-down\r\n v.label = \"浮遊\";\r\n if(!number){\r\n number = 30;\r\n }\r\n\r\n v.priority = Math.floor(number*(-1 + Math.cos(Math.PI*2*(today.getTime() - date.getTime())/oneday/number))) - 7;\r\n break;\r\n case \"+\": // todo\r\n v.label = \"ToDo\";\r\n if(!number){\r\n number = 7;\r\n }\r\n\r\n // その日に優先度が0となるように X日かけて上がっていく\r\n //if(today.getTime() < date.getTime()){\r\n // v.priority = -9999;\r\n //}else{\r\n v.priority = Math.floor((today.getTime() - date.getTime())/oneday) - number;\r\n //}\r\n break;\r\n default:\r\n v.priority = 9999; // invalid schedule\r\n }\r\n })\r\n o.lines.sort((a,b) => {return b.priority - a.priority})\r\n let mode = 0;\r\n o.lines.forEach((v)=>{\r\n if(mode === 1 && v.priority === -9999){\r\n body.push(\" \")\r\n mode = 2;\r\n }\r\n if(mode === 0 && v.priority < 0){\r\n body.push(\" \")\r\n mode = 1;\r\n }\r\n let calcColor = (p) => {\r\n if(p > 0){return \"255,160,160\";}\r\n if(p === 0){return \"255,255,100\";}\r\n if(p === -9999){return \"120,120,120\";}\r\n if(p < -7){return \"200,200,200\";}\r\n return \"255,255,255\";\r\n }\r\n if(v.show){\r\n body.push(\"\" + v.label + \" \" + v.text + \"\" +v.priority + \" \" + v.user + \":\" + v.id + \":\" + v.lineNo + \" * \")\r\n }\r\n })\r\n dispatch(previewLine(name, no, body.join(\"\\n\")));\r\n })\r\n })\r\n break;\r\n case \"find\":\r\n ret += \">> find \";\r\n ret += \"\"\r\n ret += \"Query:\" + lastPart.join(\",\")\r\n ret += \"
\"\r\n let queue = []\r\n lastPart.forEach((e) => {\r\n if(e.indexOf(\"!& \") === 0){\r\n queue.push([\"!&\", e.slice(3)])\r\n }else if(e.indexOf(\"& \") === 0){\r\n queue.push([\"&\", e.slice(2)])\r\n }else if(e === \"*\"){\r\n queue.push([\"*\", \"\"])\r\n }else if(e.indexOf(\"r \") === 0){\r\n queue.push([\"r\", e.slice(2)])\r\n }else{\r\n queue.push([\"\", e])\r\n }\r\n })\r\n let result = {}\r\n let run = () => {\r\n if(queue.length === 0){\r\n // end of command\r\n let body = [];\r\n body.push(\">> find "\" + lastPart.join(\",\") + \"" \")\r\n body.push(\"\")\r\n\r\n let lines = Object.values(result)\r\n lines.sort((a,b) => { // sort new -> old\r\n let ad = new Date(a.modTime);\r\n let bd = new Date(b.modTime);\r\n return bd.getTime() - ad.getTime();\r\n }).forEach((v)=>{\r\n let content = \"\"\r\n if(v.cover !== \"\"){\r\n content = '
'\r\n }\r\n body.push(\"
\" + content + \"\" + v.text + \"
\")\r\n })\r\n body.push(\"
\")\r\n dispatch(previewLine(name, no, body.join(\"\\n\")));\r\n }else{\r\n let command = queue.shift()\r\n if(command[0] === \"*\"){\r\n global.getDetailList(global.user).then((resp) => {\r\n resp.json().then((o) => {\r\n o.pages.forEach((e) => {\r\n result[global.user + \"/\" + e.name] = e\r\n e.user = global.user\r\n e.id = e.name\r\n e.text = e.description\r\n })\r\n run()\r\n })\r\n })\r\n }else if(command[0] === \"r\"){\r\n let newResult = {}\r\n let pageNameSet = new Set()\r\n let n = parseInt(command[1])\r\n if(!n){ n = 10}\r\n for(let i = 0; i < n; i ++){\r\n let page = choice(Object.values(result))\r\n if(!pageNameSet.has(page.user + \"/\" + page.id)){\r\n pageNameSet.add(page.user + \"/\" + page.id)\r\n newResult[page.user + \"/\" + page.id] = page\r\n }\r\n }\r\n result = newResult\r\n run()\r\n }else{\r\n global.sendSearch(command[1]).then((resp) => {\r\n resp.json().then((o) => {\r\n if(command[0] === \"!&\"){\r\n o.lines.forEach((e) => {\r\n if(result[e.user + \"/\" + e.id]){\r\n delete result[e.user + \"/\" + e.id]\r\n }\r\n })\r\n }else if(command[0] === \"&\"){\r\n let newResult = {}\r\n o.lines.forEach((e) => {\r\n if(result[e.user + \"/\" + e.id]){\r\n newResult[e.user + \"/\" + e.id] = e\r\n }\r\n })\r\n result = newResult\r\n }else{ // OR\r\n o.lines.forEach((e) => {\r\n if(!result[e.user + \"/\" + e.id]){\r\n result[e.user + \"/\" + e.id] = e\r\n }\r\n })\r\n }\r\n run()\r\n })\r\n })\r\n }\r\n }\r\n }\r\n run()\r\n break;\r\n case \"list\":\r\n ret += \">> list \";\r\n ret += \"loading list..
\"\r\n let showList = () => {\r\n if(!global.list || global.list.length === 0){\r\n setTimeout(showList, 500)\r\n }else{\r\n let lineStr = global.list.filter((s) => s.name.indexOf(lastPart[0]) === 0).map((s) => \"\" + escapeHTML(s.name, global.user) + \" * \").join(\"\")\r\n dispatch(previewLine(name, no, \">> list \" + lineStr + \"
\"));\r\n }\r\n }\r\n setTimeout(showList, 100)\r\n break;\r\n case \"boxlist\":\r\n ret += \">> boxlist \";\r\n ret += \"loading list..
\"\r\n global.getDetailList(global.user).then((resp) => {\r\n resp.json().then((o) => {\r\n let pages = o.pages;\r\n let lineStr = pages.filter((s) => s.name.indexOf(lastPart[0]) === 0).sort((a,b) => (new Date(b.modTime)).getTime() - (new Date(a.modTime)).getTime()).map((s) => {\r\n let content = s.description.slice(0,50) + '...'\r\n if(s.cover !== \"\"){\r\n content = ' '\r\n }\r\n return \"\"+content+\" \"\r\n }).join(\"\")\r\n dispatch(previewLine(name, no, \">> boxlist \" + lineStr + \"
\"));\r\n })\r\n })\r\n break;\r\n case \"url\":\r\n ret += \">> url \";\r\n ret +='
'\r\n break;\r\n case \"oembed\":\r\n if(global.mode === \"console\"){\r\n ret += \"NOT IMPLEMENT oembed render\";\r\n }else{\r\n let url = \"https://noembed.com/embed\";\r\n var fname = \"callback_\" + Math.random().toString(36).slice(-8);\r\n let body = lastPart[0]\r\n if(body){\r\n if(body.indexOf(\"https://twitter.com\") !== -1){\r\n url = \"https://api.twitter.com/1/statuses/oembed.json\";\r\n }\r\n url += \"?url=\"+encodeURIComponent(body.replace(/[\\r\\n]/g,\"\"))+'&callback=' + fname;\r\n jsonp(fname, url, function(data){\r\n var body = '>> oembed ' + data.html;\r\n dispatch(previewLine(name, no, body));\r\n window.twttr.widgets.load() // TODO: global object?\r\n });\r\n ret += \"oembed...\"+body\r\n }\r\n }\r\n break\r\n case \"item\":\r\n ret += \">> item \";\r\n ret += ''\r\n ret += ' '\r\n ret += ''\r\n ret += ''\r\n ret += ' '\r\n ret += ' '\r\n ret += ''\r\n ret += lastPart[2]\r\n ret += ' '\r\n ret += ' '\r\n ret += '
'\r\n ret += ''\r\n break;\r\n case \"table\":\r\n ret += \">> table \";\r\n ret += \"\";\r\n lastPart.forEach(function(i){\r\n ret += \"\";\r\n i.split(\",\").forEach(function(j){\r\n ret += \"\";\r\n ret += escapeHTML(j, global.user, global.keywords);\r\n ret += \" \";\r\n });\r\n ret += \" \";\r\n });\r\n ret += \"
\";\r\n break;\r\n default:\r\n ret += \"\" + text + \" \";\r\n }\r\n }else{\r\n ret += \"\" + text + \" \";\r\n }\r\n return ret;\r\n }else{\r\n if(text.indexOf(\"###\") === 0){\r\n return \"\" + escapeHTML(text, global.user, global.keywords) + \" \"\r\n }else if(text.indexOf(\"##\") === 0){\r\n return \"\" + escapeHTML(text, global.user, global.keywords) + \" \"\r\n }else if(text.indexOf(\"#\") === 0){\r\n return \"\" + escapeHTML(text, global.user, global.keywords) + \" \"\r\n }else if(text.indexOf(\"-\") === 0){\r\n return \"\" + escapeHTML(text, global.user, global.keywords) + \" \"\r\n }\r\n return \"\"+htmlEncode(parse(text), global.user, global.keywords)+\"
\"\r\n }\r\n}\r\n\r\nexport const isBlock = (text) => {\r\n return text.indexOf(\">>\") === 0\r\n}\r\n\r\n// sのindex番目がx,yで何番目か調べる\r\nexport const getCursorPos = (index, text) => {\r\n var list = text.split(/[\\r\\n]/);\r\n var pos = 0;\r\n var i;\r\n for(i = 0; i < list.length; i ++){\r\n pos += list[i].length + 1;\r\n if(pos > index){\r\n // X, Y\r\n return [index - (pos - list[i].length - 1), i]\r\n }\r\n }\r\n console.log(\"error getPos\")\r\n}\r\nexport const getLines = (text) => {\r\n var list = text.split(/[\\r\\n]/);\r\n return list;\r\n}\r\n\r\nexport const numLines = (s) => {\r\n return s.split(/[\\r\\n]/).length\r\n}\r\n\r\n","import pkg from 'mermaid'\r\nconst {mermaidAPI} = pkg\r\n\r\nexport const mermaidRender = (no, text) => {\r\n let render = \"\";\r\n try{\r\n let elementId = 'mermaid' + no;\r\n let preRenderedElement = document.getElementById(elementId);\r\n if(preRenderedElement){\r\n preRenderedElement.innerHTML = \"\";\r\n preRenderedElement.parentNode.removeChild(preRenderedElement);\r\n }\r\n mermaidAPI.parse(text.join(\"\\n\"));\r\n mermaidAPI.render(elementId, text.join(\"\\n\"), function(svgCode){\r\n render = svgCode;\r\n })\r\n }catch(e){\r\n console.log(e)\r\n render = \"\"+e.str+\" \";\r\n }\r\n // TODO: why can I get rendered code?\r\n return \"\"+render+\"
\";\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types'\r\nimport ReactTextareaAutocomplete from \"@webscopeio/react-textarea-autocomplete\"\r\nimport \"@webscopeio/react-textarea-autocomplete/style.css\";\r\n\r\nclass Line extends React.Component{\r\n constructor(props) {\r\n super(props)\r\n this.dirtyByKeyDown = false;\r\n\t\tthis.rows = 1\r\n this.send = this.send.bind(this);\r\n this.keyHandler = this.keyHandler.bind(this);\r\n this.clickHandler = this.clickHandler.bind(this);\r\n this.allKeywords = {};\r\n }\r\n send(e){\r\n\t\tthis.rows = ~~(e.target.scrollHeight/24)\r\n this.props.onChange(this.props.no, e.target.value) // onChange calls all time\r\n\r\n if(this.dirtyByKeyDown){\r\n this.dirtyByKeyDown = false;\r\n //this.props.onChange(this.props.no, e.target.value) // this line doesn't work on iPhone\r\n\r\n if(this.props.onUpdate){\r\n this.props.onUpdate() // trigger save or something\r\n }\r\n }\r\n\r\n return;\r\n }\r\n keyHandler(e){\r\n let matchIndent;\r\n switch(e.keyCode){\r\n case 9: // tab\r\n this.dirtyByKeyDown = true\r\n this.props.onTab(this.props.no, this.props.text, e.shiftKey)\r\n this.props.onUpdate()\r\n e.preventDefault()\r\n break\r\n case 38: //up\r\n this.props.onUp(this.props.no, e.target.selectionStart, this.props.text)\r\n break;\r\n case 40: //down\r\n this.props.onDown(this.props.no, e.target.selectionStart, this.props.text)\r\n break;\r\n case 37: //left\r\n // when cursor is head\r\n if(e.target.selectionStart === 0 && e.target.selectionEnd === 0){\r\n this.props.onLeftUp(this.props.no)\r\n }else{\r\n }\r\n break;\r\n case 39: //right\r\n // when cursor is end\r\n if(e.target.selectionStart === this.props.text.length){\r\n this.props.onDown(this.props.no, 0, this.props.text)\r\n }else{\r\n }\r\n break;\r\n case 13: //enter\r\n this.dirtyByKeyDown = true\r\n let ret = this.props.onEnter(this.props.no, this.props.text, e.target.selectionStart, e.shiftKey)\r\n if(ret.preventDefault){\r\n e.preventDefault()\r\n }\r\n if(ret.update){\r\n this.props.onUpdate()\r\n }\r\n break;\r\n case 32: //Space\r\n let isTabEvent = e.target.selectionStart === 0 && e.target.selectionEnd === 0\r\n matchIndent = this.props.text.match(/(\\s*)- /)\r\n if(matchIndent){\r\n let indent = matchIndent[0].length\r\n isTabEvent |= e.target.selectionStart === indent && e.target.selectionEnd === indent\r\n }\r\n if(isTabEvent){\r\n this.dirtyByKeyDown = true\r\n this.props.onTab(this.props.no, this.props.text, false)\r\n this.props.onUpdate()\r\n e.preventDefault()\r\n }\r\n break;\r\n case 8: //BS\r\n // when cursor is head\r\n this.dirtyByKeyDown = true\r\n if(e.target.selectionStart === 0 && e.target.selectionEnd === 0){\r\n this.props.onBS(this.props.no, this.props.text)\r\n e.preventDefault()\r\n }\r\n matchIndent = this.props.text.match(/(\\s*)- /)\r\n if(matchIndent){\r\n let indent = matchIndent[0].length\r\n if(e.target.selectionStart === indent && e.target.selectionEnd === indent){\r\n this.props.onTab(this.props.no, this.props.text, true)\r\n this.props.onUpdate()\r\n e.preventDefault()\r\n }\r\n }\r\n this.props.onUpdate()\r\n break;\r\n default:\r\n // pass\r\n this.dirtyByKeyDown = true\r\n }\r\n }\r\n clickHandler(e){\r\n this.props.onClick(this.props.no);\r\n }\r\n render() {\r\n let loadingComponent = () => Loading \r\n let trigger = {\r\n \"[\": {\r\n dataProvider: token => {\r\n if(Object.keys(this.allKeywords).length === 0){\r\n this.props.keywords.forEach((k) => {\r\n this.allKeywords[k.keyword] = {src: \"\", title:k.keyword}\r\n })\r\n Object.keys(this.props.externalKeywords).forEach((p) => {\r\n this.props.externalKeywords[p].forEach((v) => {\r\n this.allKeywords[v.title] = {src: p + \"::\", title: v.title}\r\n v.links.forEach((v) => {\r\n this.allKeywords[v] = {src: p + \"::\", title: v}\r\n })\r\n })\r\n })\r\n }\r\n token = token.toLowerCase()\r\n let arr = Object.values(this.allKeywords).filter((v) => v.title.toLowerCase().indexOf(token) !== -1).map((v) => {return {\"value\": \"[\" + v.title + \"]\", \"src\": v.src}});\r\n return arr.slice(0,30)\r\n },\r\n component: ({ entity: { value, src } }) => {`${src}${value}`}
,\r\n output: (item, trigger) => {\r\n this.dirtyByKeyDown = true\r\n return item.value\r\n },\r\n allowWhitespace: true,\r\n }\r\n }\r\n if(this.props.isBlock){\r\n return (\r\n \r\n )\r\n }else{\r\n // inline\r\n return (\r\n 0?{marginLeft: (this.props.isFocus?20:(this.props.indent * 10 + 10))+\"px\"}:{}} onClick={this.clickHandler} data-lineno={this.props.no}>\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n }\r\n updateFocus(){\r\n if(this.props.isFocus){\r\n this.refs.rawInput.textareaRef.focus();\r\n if(this.props.dirty){\r\n var that = this;\r\n setTimeout(function(){\r\n // FIXME: remove setTimeout\r\n that.refs.rawInput.textareaRef.setSelectionRange(that.props.column, that.props.column);\r\n that.props.onRefreshed(that.props.no, that.props.column);\r\n },10);\r\n }\r\n\r\n\t\t\t// fix textarea size (heavy task?)\r\n\t\t\tlet prev = this.rows\r\n\t\t this.rows = ~~(this.refs.rawInput.textareaRef.scrollHeight/24)\r\n\t\t\tif(prev !== this.rows){\r\n this.props.onRefreshed(this.props.no, this.props.column);\r\n\t\t\t}\r\n }\r\n }\r\n componentDidUpdate(){\r\n this.updateFocus()\r\n }\r\n componentDidMount(){\r\n this.updateFocus()\r\n }\r\n\r\n}\r\nLine.propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n onUp: PropTypes.func.isRequired,\r\n onDown: PropTypes.func.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n onLeftUp: PropTypes.func.isRequired,\r\n onBS: PropTypes.func.isRequired,\r\n onRefreshed: PropTypes.func.isRequired,\r\n no: PropTypes.number.isRequired,\r\n selected: PropTypes.bool.isRequired,\r\n isBlock: PropTypes.bool.isRequired,\r\n text: PropTypes.string.isRequired\r\n}\r\n\r\nexport default Line\r\n","import React from 'react';\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport {changeLine, insertLine, deleteLine, setCursor, deselectAll} from '../actions'\r\nimport Line from './Line'\r\nimport {isBlock, Render, getCursorPos, numLines, getLines} from '../utils/render'\r\n\r\nclass Lines extends React.Component{\r\n //constructor(props) {\r\n // super(props)\r\n //}\r\n render() {\r\n return (\r\n \r\n {this.props.lines.map((line, index) => (\r\n =this.props.lines.length - 1?\"\":this.props.lines[index + 1].text, index >= this.props.lines.length - 1)}\r\n onEnter={this.props.onEnter(this.props.name, this.props.onMagic)}\r\n onTab={this.props.onTab(this.props.name)}\r\n onClick={this.props.onClick(this.props.name)}\r\n onLeftUp={this.props.onLeftUp(\r\n this.props.name,\r\n index===0?\"\":this.props.lines[index - 1].text)}\r\n onBS={this.props.onBSfunc(\r\n this.props.name,\r\n index===0?\"\":this.props.lines[index - 1].text)}\r\n onRefreshed={this.props.onRefreshed(this.props.name)}\r\n />\r\n ))}\r\n
\r\n )\r\n }\r\n}\r\nLines.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onUp: PropTypes.func.isRequired,\r\n onDown: PropTypes.func.isRequired,\r\n onEnter: PropTypes.func.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n onBSfunc: PropTypes.func.isRequired,\r\n}\r\n\r\nconst calcFocus = ((editable, col, row, dirty, index) => {\r\n if(index === row && editable){\r\n return {\r\n isFocus: true,\r\n column: col,\r\n dirty: dirty\r\n }\r\n }else{\r\n return {\r\n isFocus: false\r\n }\r\n }\r\n})\r\n\r\nconst calcClassName = (text) => {\r\n let className = \"normal\"\r\n if(isBlock(text)){\r\n className = \"block\"\r\n }else{\r\n if(text.indexOf(\"###\") === 0){\r\n className = \"h3\"\r\n }else if(text.indexOf(\"##\") === 0){\r\n className = \"h2\"\r\n }else if(text.indexOf(\"#\") === 0){\r\n className = \"h1\"\r\n }else if(text.search(/\\s*- /) === 0){\r\n className = \"list\"\r\n }else if(text.length === 0){\r\n className = \"empty\"\r\n }\r\n }\r\n return className;\r\n}\r\nconst calcIndent = (text) => {\r\n if(!isBlock(text)){\r\n if(text.search(/\\s*- /) === 0){\r\n let m = text.match(/^(\\s*)-/)\r\n let len = (m[1].length/2)|0\r\n return len + 1\r\n }\r\n }\r\n return 0;\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {}\r\n}\r\n\r\nfunction makeGlobal(ownProps){\r\n return {\r\n sendSearch: ownProps.sendSearch,\r\n sendSearchSchedule: ownProps.sendSearchSchedule,\r\n getDetailList: ownProps.context.getDetailList,\r\n list: ownProps.items,\r\n keywords: ownProps.context?ownProps.context.keywords:[], // in case of menu and side\r\n user: ownProps.context.user,\r\n mermaidRender: ownProps.mermaidRender\r\n };\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => {\r\n return {\r\n onChange: (name) => (no, text) => {\r\n dispatch(changeLine(name, no, text, Render(name, no, text, makeGlobal(ownProps), dispatch)))\r\n },\r\n onUp: (name, upText) => (no, col, text) => {\r\n if(no <= 0){\r\n return;\r\n }\r\n let pos = getCursorPos(col,text);\r\n if(isBlock(text) && pos[1] > 0){\r\n return;\r\n }\r\n if(isBlock(upText.text)){\r\n let lines = getLines(upText.text);\r\n lines.pop()\r\n let firstPart = lines.join(\"\\n\");\r\n dispatch(setCursor(name, no - 1, firstPart.length + col, true))\r\n }else{\r\n dispatch(setCursor(name, no - 1, col, true))\r\n }\r\n },\r\n onDown: (name, downText, lastLineFlag) => (no, col, text) => {\r\n let num = numLines(text);\r\n let pos = getCursorPos(col,text);\r\n if(isBlock(text) && pos[1] < num - 1){\r\n return;\r\n }\r\n if(isBlock(downText)){\r\n let lines = getLines(downText);\r\n let firstLine = lines[0];\r\n dispatch(setCursor(name, no + 1, Math.min(col, firstLine.length), true))\r\n }else{\r\n if(!lastLineFlag){\r\n dispatch(setCursor(name, no + 1, col, true))\r\n }\r\n }\r\n },\r\n onEnter: (name, onMagic) => (no, text, pos, shift) => {\r\n if(isBlock(text)){\r\n if(shift){\r\n dispatch(insertLine(name, no + 1, \"\", \"\"))\r\n dispatch(setCursor(name, no + 1, 0, true))\r\n return {preventDefault: true, update: true};\r\n }\r\n return {preventDefault: false, update: true};\r\n }else{\r\n if(shift){\r\n // show magic popup\r\n dispatch(setCursor(name, no, pos, true))\r\n onMagic(no, pos, text)\r\n return {preventDefault: false, update: false};\r\n }else{\r\n dispatch(setCursor(name, no + 1, 0, true))\r\n if(text === undefined)text = \"\"\r\n let listMatch = text.match(/(\\s*)- /)\r\n let indent = -1;\r\n if(listMatch){\r\n indent = listMatch[1].length/2\r\n }\r\n let t1 = text.slice(0, pos)\r\n dispatch(changeLine(name, no, t1, Render(name, no, t1, makeGlobal(ownProps), dispatch)))\r\n let t2 = text.slice(pos)\r\n if(indent !== -1){\r\n t2 = \"- \" + t2\r\n for(let i = 0; i < indent; i ++){\r\n t2 = \" \" + t2\r\n }\r\n dispatch(setCursor(name, no + 1, t2.length, true))\r\n }\r\n dispatch(insertLine(name, no + 1, t2, Render(name, no + 1, t2, makeGlobal(ownProps), dispatch)))\r\n return {preventDefault: true, update: true}; // prevent default\r\n }\r\n }\r\n },\r\n onTab: (name) => (no, text, shift) => {\r\n if(shift){\r\n if(text.search(/\\s*- /) === 0){ // already list\r\n if(text.indexOf(\"- \") === 0){\r\n text = text.slice(2);\r\n }else{\r\n text = text.slice(2);\r\n }\r\n }else{ // not list\r\n // none\r\n }\r\n }else{\r\n if(text.search(/\\s*-+/) === 0){ // already list\r\n text = \" \" + text\r\n }else{ // first list\r\n text = \"- \" + text\r\n }\r\n }\r\n dispatch(changeLine(name, no, text, Render(name, no, text, makeGlobal(ownProps), dispatch)))\r\n },\r\n onLeftUp: (name, pretext) => (no) =>{\r\n if(no > 0){\r\n dispatch(setCursor(name, no - 1, pretext.length, true))\r\n }\r\n },\r\n onBSfunc: (name, pretext) => (no, text) =>{\r\n dispatch(setCursor(name, no - 1, pretext.length, true))\r\n let t = pretext + text;\r\n dispatch(changeLine(name, no-1, t, Render(name, no - 1, t, makeGlobal(ownProps), dispatch)))\r\n dispatch(deleteLine(name, no))\r\n },\r\n onClick: (name) => (no) => {\r\n dispatch(deselectAll(\"main\"))\r\n dispatch(setCursor(name, no, 0, false))\r\n },\r\n onRefreshed: (name) => (no, col) => {\r\n dispatch(setCursor(name, no, col, false))\r\n }\r\n }\r\n}\r\n\r\nconst LinesContainer = connect(mapStateToProps, mapDispatchToProps)(Lines)\r\n\r\nexport default LinesContainer\r\n","import React from 'react';\n\nclass InstantSearch extends React.Component{\n render() {\n let sorter = (list) => {\n let out = []\n let out2 = []\n // push not diary page\n list.forEach((item) => {\n if(item.id && null == item.id.match(/\\d{4}-\\d{2}-\\d{2}/)){\n out.push(item)\n }else{\n out2.push(item)\n }\n })\n return out.concat(out2)\n }\n return (\n \n {Object.keys(this.props.item).map((k, j) => (\n
\n
Search result of '{k}'
\n
\n {sorter(this.props.item[k]).slice(0,20).map((r, i) => (\n
\n {r.url?\n ():\n ()\n }\n \n {(() => {if(r.cover) return
})()}\n {r.text}\n
\n \n ))}\n
\n
\n ))}\n
\n )\n }\n}\nexport default InstantSearch\n","// Render言語のとても簡単なパーサ\r\nvar SimpleParser = function(){\r\n this.pathData = [];\r\n};\r\nSimpleParser.prototype = {\r\n parse: function(s) { \r\n var lines = s.split(/[\\r\\n]+/);\r\n var ls;\r\n var out = [];\r\n for(var i = 0; i < lines.length; i ++){\r\n ls = lines[i].split(/\\s+/);\r\n out.push(this.proc(ls));\r\n }\r\n return out;\r\n },\r\n proc : function(t){\r\n var tmp = [];\r\n switch(t[0]){\r\n case 'fillText':\r\n case 'strokeText':\r\n case 'font':\r\n tmp[0] = t[0];\r\n tmp[1] = t.slice(1).join(\" \");\r\n return tmp;\r\n case 'scale':\r\n case 'shift':\r\n case 'rotate':\r\n case 'skew':\r\n case 'blur':\r\n case 'bs':\r\n case 'save':\r\n case 'restore':\r\n case 'beginPath':\r\n case 'lineTo':\r\n case 'quadTo':\r\n case 'path':\r\n case 'arcTo':\r\n case 'bezierTo':\r\n case 'moveTo':\r\n case 'closePath':\r\n case 'fill':\r\n case 'stroke':\r\n case 'clip':\r\n case 'resetClip':\r\n case 'affine':\r\n case 'resetAffine':\r\n case 'fs':\r\n case 'ss':\r\n case 'lw':\r\n case 'dlw':\r\n case 'radialGrad':\r\n case 'linearGrad':\r\n case 'cs':\r\n case 'fsGrad':\r\n case 'ssGrad':\r\n case 'createImage':\r\n case 'drawImage':\r\n case 'setTarget':\r\n case 'drawExtImage':\r\n //case 'fsPattern':\r\n return t;\r\n default:\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction Affine(){\r\n this.data=[[1,0,0],[0,1,0],[0,0,1]];\r\n if(arguments.length === 9){\r\n this.data = [\r\n [arguments[0],arguments[1],arguments[2]],\r\n [arguments[3],arguments[4],arguments[5]],\r\n [arguments[6],arguments[7],arguments[8]]\r\n ];\r\n }else if(arguments.length === 0){\r\n }else{\r\n throw new Error(\"arguments size error\");\r\n }\r\n}\r\n\r\nAffine.prototype = {\r\n mul:function(a){\r\n\r\n\r\n var tmp = 0;\r\n var next = [];\r\n for(var i = 0; i < 3; i++){\r\n for(var j = 0; j < 3; j++){\r\n tmp = 0;\r\n for(var k = 0; k < 3; k++){\r\n tmp += this.data[i][k] * a.data[k][j];\r\n //tmp += a.data[i][k] * this.data[k][j]\r\n }\r\n\r\n\r\n if(next[i] === undefined)next[i] = [];\r\n next[i].push(tmp);\r\n }\r\n }\r\n this.data = next;\r\n\r\n },\r\n dist:function(x,y){return Math.sqrt(x*x + y*y)},\r\n scale:function(){\r\n return this.dist(this.data[0][0], this.data[1][1])/Math.sqrt(2);\r\n },\r\n calc:function(x,y){\r\n var tmp = 0;\r\n var ans = [];\r\n var a = [x, y, 1];\r\n for(var i = 0; i < 3; i++){\r\n tmp = 0;\r\n for(var j = 0; j < 3; j++){\r\n tmp += this.data[i][j] * a[j]\r\n }\r\n ans.push(tmp);\r\n }\r\n return ans;\r\n },\r\n clone:function(){\r\n var o = new Affine();\r\n for(var i = 0; i < 3; i++){\r\n for(var j = 0; j < 3; j++){\r\n o.data[i][j] = this.data[i][j]\r\n }\r\n }\r\n return o;\r\n }\r\n}\r\n\r\n\r\n// web fontの設定\r\n\r\nvar WebFontConfig = {\r\n google: { families: [ 'Tangerine', 'Cantarell' ] },\r\n custom: { families:[], urls:[]},\r\n loading:function(){},\r\n fontloading:function(){},\r\n fontactivate:function(family,fontDescription){\r\n\r\n },\r\n fontinacive:function(family,fontDescription){\r\n //fail\r\n },\r\n active:function(){\r\n // here!! all fonts loaded!\r\n //alert(\"loaded\");\r\n },\r\n inactive:function(){\r\n //doesnot support webfont\r\n }\r\n};\r\n\r\n// フォントクラス\r\nfunction Fonts(){\r\n this.cache = \"\";\r\n this.fontScript =null;\r\n this.fonts=['Yesteryear']; // 何か読み込まないとダメっぽい\r\n this.local=[];\r\n}\r\nFonts.prototype={\r\n add:function(fn){\r\n if(fn.length===0)return;\r\n if(fn instanceof Array)return;\r\n\r\n for(var i=0;i\r\n \r\n
\r\n
{this.props.cursor.title} \r\n
\"inline\" はインライン編集できるWIKIのようなものです
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {this.props.popupMenu.items.map((k) =>
)}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
{(this.props.rightCursor.title)} \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n }}\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n lines: state.lines,\r\n sideLines: state.sideLines,\r\n rightLines: state.rightLines,\r\n cursor: state.cursor,\r\n sideCursor: state.sideCursor,\r\n rightCursor: state.rightCursor,\r\n items: state.items,\r\n loginButton: state.loginButton,\r\n search: state.search,\r\n instantSearch: state.instantSearch,\r\n rightInstantSearch: state.rightInstantSearch,\r\n modalList: state.modalList,\r\n popupMenu: state.popupMenu,\r\n }\r\n}\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n onSearch: (sendSearch) => (keyword) => {\r\n console.log(\"search\", keyword)\r\n dispatch(updateResults([{text:\"loading...\"}]))\r\n sendSearch(keyword).then((resp) => {\r\n resp.json().then((o) => {\r\n dispatch(updateResults(o.lines))\r\n })\r\n })\r\n },\r\n onRename: (sendRename, user) => (from, to) => {\r\n sendRename(from, to).then((resp) => {\r\n resp.json().then((o) => {\r\n // jump to new page\r\n console.log(o)\r\n document.location.href = '?user=' + encodeURIComponent(user) + '&id=' + encodeURIComponent(to)\r\n })\r\n })\r\n },\r\n updateKeyword: (keyword) => {\r\n dispatch(updateKeyword(keyword))\r\n },\r\n onSelectList: (cursor, targetLine) => (text, inline) => {\r\n if(inline){\r\n let t1 = targetLine.text.slice(0, targetLine.pos)\r\n let t2 = targetLine.text.slice(targetLine.pos)\r\n let nextText = t1 + text + t2\r\n dispatch(changeLine(\"main\", cursor.row, nextText, Render(\"main\", cursor.row, nextText, global))) // TODO: global is deprecate\r\n dispatch(setCursor(\"main\", cursor.row, cursor.col + text.length, true))\r\n }else{\r\n dispatch(insertLine(\"main\", cursor.row, text, Render(\"main\", cursor.row, text, global))) // TODO: global is deprecate\r\n }\r\n },\r\n onModalListClose: () => {\r\n dispatch(setReadWrite(\"main\"))\r\n },\r\n onMagic: (no, pos, text) => {\r\n dispatch(setReadOnly(\"main\"))\r\n dispatch(modalListOpen(no, pos, text))\r\n },\r\n onDebug: (user, lines, context, opts, meta, postPage, savePromise) => () => {\r\n let previousMeta = {...meta};\r\n let previousOpts = {id: opts.id, user: opts.user}\r\n //dispatch(modalListOpen())\r\n let newText = [];\r\n let out = [];\r\n let firstLine = true;\r\n lines.forEach((l) => {\r\n if(l.selected){\r\n out.push(l.text)\r\n if(firstLine){\r\n newText.push(\"[\" + l.text + \"]\")\r\n firstLine = false;\r\n }\r\n }else{\r\n newText.push(l.text)\r\n }\r\n })\r\n\r\n // new page\r\n let id = out[0]\r\n dispatch(clearInstantResults())\r\n dispatch(clearAll(\"main\"))\r\n const url = new URL(window.location)\r\n url.search = \"?user=\" + encodeURIComponent(user) + \"&id=\" + encodeURIComponent(id)\r\n window.history.pushState({},\"\", url)\r\n document.title = id\r\n opts.id = encodeURIComponent(id) // TODO: replace opts to context\r\n dispatch(clearItem())\r\n\r\n dispatch(setTitle(\"main\", decodeURIComponent(id)))\r\n let lineNo = 0\r\n out.unshift(\"\")\r\n out[0] = \"from [\" + decodeURIComponent(previousOpts.id) + \"]\"\r\n out[1] = \"\"\r\n out.forEach((l) => {\r\n dispatch(insertLine(\"main\", lineNo, l , Render(\"main\", lineNo, l, context)))\r\n lineNo ++;\r\n })\r\n // save new page\r\n savePromise().then((o) => {\r\n Object.assign(meta, o.meta)\r\n let rawLines = newText.map((line) => {\r\n if(isBlock(line)){\r\n return line + \"\\n<<\"\r\n }else{\r\n return line\r\n }\r\n }).join(\"\\n\")\r\n // save original page\r\n postPage(previousOpts.user, previousOpts.id, rawLines, previousMeta.lastUpdate, previousMeta.image)\r\n })\r\n },\r\n }\r\n}\r\n\r\nconst AppContainer = connect(mapStateToProps, mapDispatchToProps)(App)\r\n\r\nexport default AppContainer\r\n","import React from 'react';\r\n\r\nclass List extends React.Component{\r\n render() {\r\n return (\r\n \r\n
\r\n {this.props.items.sort((a, b) => b.modTime - a.modTime).slice(0, 100).map((item, index) => (\r\n {item.name} * \r\n ))}\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default List\r\n","import React from 'react';\r\n\r\nclass LoginButton extends React.Component{\r\n render() {\r\n if(!this.props.logined){\r\n return (\r\n \r\n LOGIN \r\n
\r\n )\r\n }else{\r\n return (\r\n \r\n
Login as {this.props.user}
\r\n
LOGOUT \r\n
\r\n )\r\n }\r\n }\r\n}\r\n\r\nexport default LoginButton\r\n","import React from 'react';\r\n\r\nclass Search extends React.Component{\r\n constructor(props) {\r\n super(props)\r\n this.submit = this.submit.bind(this)\r\n this.change = this.change.bind(this)\r\n }\r\n submit(e) {\r\n this.props.onSearch(this.props.keyword)\r\n e.preventDefault()\r\n return false\r\n }\r\n change(e) {\r\n this.props.onUpdateKeyword(e.target.value)\r\n e.preventDefault()\r\n return false\r\n }\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n {this.props.results.map((o, i) => (\r\n
\r\n ))}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Search\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nimport { connect } from 'react-redux'\r\nimport { \r\n modalListUpdateList,modalListUp, modalListDown, modalListClose, modalListUpdateQuery\r\n} from '../actions'\r\nimport {jsonp} from '../inline-editor/utils/jsonp';\r\n\r\nclass ModalList extends React.Component{\r\n constructor(props) {\r\n super(props)\r\n this.queryRef = React.createRef();\r\n }\r\n componentDidUpdate(){\r\n if(this.props.phase !== \"NONE\"){\r\n // TODO: below line doesn't work well. sometimes queryRef is null.\r\n // if call update, this works well but takes some freeze.\r\n if(this.queryRef.current){\r\n this.queryRef.current.focus()\r\n }\r\n var target = this.refs[\"item\" + this.props.index];\r\n if(target){\r\n target.scrollIntoView()\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n \r\n
ProviderList \r\n
\r\n {this.props.providers.map((item, i) => (\r\n \r\n {item.name}
\r\n \r\n ))}\r\n \r\n
\r\n \r\n
List \r\n
\r\n {this.props.list.map((item, i) => (\r\n \r\n {item.title}
\r\n \r\n ))}\r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\r\n return {\r\n onModalQueryChange: (phase, provider, items) => (e) =>{\r\n // TODO: this implementation is ad-hoc\r\n if(phase === \"LIST\" && provider.name === \"page\"){\r\n let viewList = []\r\n items.forEach((i) => {\r\n if(i.name.indexOf(e.target.value) !== -1){\r\n viewList.push({\r\n title: i.name,\r\n text: \"[\" + i.name + \"]\",\r\n })\r\n }\r\n })\r\n dispatch(modalListUpdateQuery(e.target.value))\r\n dispatch(modalListUpdateList(viewList))\r\n return\r\n }\r\n dispatch(modalListUpdateQuery(e.target.value))\r\n },\r\n onKeyDown: (query, phase, items, title, provider, index, text, onSelectList, onRename, onClose) => (e) => {\r\n switch(e.keyCode){\r\n case 27: // esc\r\n dispatch(modalListClose())\r\n onClose()\r\n break;\r\n case 38: // up\r\n dispatch(modalListUp())\r\n break;\r\n case 40: // down\r\n dispatch(modalListDown())\r\n break;\r\n case 13: // enter\r\n switch(phase){\r\n case \"PROVIDERS\":\r\n switch(provider.name){\r\n case \"rename\":\r\n onRename(title, query)\r\n break;\r\n case \"page\":\r\n let viewList = []\r\n console.log(items)\r\n items.forEach((i) => {\r\n if(i.name.indexOf(query) !== -1){\r\n viewList.push({\r\n title: i.name,\r\n text: \"[\" + i.name + \"]\",\r\n })\r\n }\r\n })\r\n dispatch(modalListUpdateList(viewList))\r\n break;\r\n case \"amazon\":\r\n jsonp(\"amazon\", \"//web.inajob.freeddns.org/ad/amz.php?callback=amazon&q=\" + encodeURIComponent(query), function(data){\r\n let list = []\r\n data.forEach((i) => {\r\n list.push({\r\n title: i.title,\r\n image: i.mimage[0],\r\n text: \">> item\\n\"+i.link[0]+ \"\\n\" +i.mimage[0] + \"\\n\" + i.title,\r\n })\r\n })\r\n dispatch(modalListUpdateList(list))\r\n })\r\n break\r\n case \"aliexpress\":\r\n jsonp(\"aliexpress\", \"//web.inajob.freeddns.org/ali-search/api.php?callback=aliexpress&q=\" + encodeURIComponent(query), function(data){\r\n let list = []\r\n data.items.forEach((i) => {\r\n let title = i.product_title.replace(/<[^>]*>/g, \"\")\r\n let image = i.product_main_image_url + \"_220x220.jpg\"\r\n list.push({\r\n title: title,\r\n image: image,\r\n text: \">> item\\n\"+i.promotion_link+ \"\\n\" + image + \"\\n\" + title,\r\n })\r\n })\r\n dispatch(modalListUpdateList(list))\r\n })\r\n break;\r\n default:\r\n throw new Error(\"unknown provider\",provider.name)\r\n }\r\n break;\r\n case \"LIST\":\r\n onSelectList(text, (provider.name === \"page\")?true:false)\r\n dispatch(modalListClose())\r\n onClose()\r\n e.preventDefault();\r\n break;\r\n default:\r\n throw new Error(\"unknown phase\", phase)\r\n }\r\n break;\r\n default:\r\n }\r\n },\r\n\r\n }\r\n}\r\nconst ModalListContainer = connect(()=>{return {}}, mapDispatchToProps)(ModalList)\r\nexport default ModalListContainer\r\n","import React from 'react';\r\n\r\nclass Controller extends React.Component{\r\n render() {\r\n if(!this.props.logined){\r\n return (\r\n \r\n
\r\n )\r\n }else{\r\n return (\r\n \r\n {/*\r\n New Page \r\n */}\r\n {this.props.message} \r\n New Diary \r\n New Junk \r\n Delete \r\n onDebug \r\n {/*\r\n Rename \r\n Delete \r\n */}\r\n
\r\n )\r\n }\r\n }\r\n}\r\n\r\nexport default Controller\r\n","let lineIndex = 1;\r\nfunction lines(state = [{text:\"\", index: 0, selected: false}], action){\r\n let newState;\r\n switch(action.type){\r\n case 'PREVIEW_LINE':\r\n //console.log(\"PREVIEW_LINE\", action.no, action.preview)\r\n return state.map((item, index) => {\r\n if(index !== action.no){\r\n return item\r\n }\r\n return {\r\n text: item.text,\r\n index: item.index,\r\n preview: action.preview,\r\n selected: item.selected,\r\n }\r\n })\r\n case 'CHANGE_LINE':\r\n //console.log(\"CHANGE_LINE\", action.no, action.text)\r\n return state.map((item, index) => {\r\n if(index !== action.no){\r\n return item\r\n }\r\n return {\r\n text: action.text,\r\n index: item.index,\r\n preview: action.preview,\r\n selected: item.selected,\r\n }\r\n })\r\n case 'INSERT_LINE':\r\n //console.log(\"INSERT_LINE\", action.no, action.text)\r\n newState = state.slice()\r\n newState.splice(action.no, 0, {\r\n text: action.text,\r\n index: lineIndex ++,\r\n preview: action.preview,\r\n selected: false,\r\n })\r\n return newState\r\n case 'SELECT_LINE':\r\n //console.log(\"SELECT_LINE\", action.no, action.preview)\r\n return state.map((item, index) => {\r\n if(index !== action.no){\r\n return item\r\n }\r\n return {\r\n text: item.text,\r\n index: item.index,\r\n preview: item.preview,\r\n selected: action.selected,\r\n }\r\n })\r\n case 'DELETE_LINE':\r\n //console.log(\"DELETE_LINE\", action.no)\r\n newState = state.slice()\r\n newState.splice(action.no, 1)\r\n return newState\r\n case 'DESELECT_ALL':\r\n //console.log(\"DESELECT_ALL\", action.no, action.preview)\r\n return state.map((item, index) => {\r\n return {\r\n text: item.text,\r\n index: item.index,\r\n preview: item.preview,\r\n selected: false,\r\n }\r\n })\r\n case 'CLEAR_ALL':\r\n //console.log(\"CLEAR_ALL\")\r\n return [{text:\"\", index: lineIndex ++, selected: false}]\r\n\r\n default:\r\n // pass\r\n }\r\n return state\r\n}\r\n\r\nexport default lines\r\n","function cursor(state = {title: \"\",col: 0, row: 0, dirty: false, editable: true}, action){\r\n switch(action.type){\r\n case 'SET_READONLY':\r\n console.log(\"SET_READONLY\", action.name)\r\n return {\r\n title: state.title,\r\n row: state.row,\r\n col: state.col,\r\n dirty: state.dirty,\r\n editable: false,\r\n }\r\n case 'SET_READWRITE':\r\n console.log(\"SET_READWRITE\", action.name)\r\n return {\r\n title: state.title,\r\n row: state.row,\r\n col: state.col,\r\n dirty: state.dirty,\r\n editable: true,\r\n }\r\n case 'SET_CURSOR':\r\n return {\r\n title: state.title,\r\n row: action.row,\r\n col: action.col,\r\n dirty: action.dirty,\r\n editable: state.editable,\r\n }\r\n case 'SET_TITLE':\r\n console.log(\"SET_TITLE\", action.name)\r\n return {\r\n title: action.title,\r\n row: state.row,\r\n col: state.col,\r\n dirty: state.dirty,\r\n editable: state.editable,\r\n }\r\n\r\n default:\r\n // pass\r\n }\r\n return state;\r\n}\r\n\r\nexport default cursor\r\n","function items(state = [], action){\r\n let newState;\r\n switch(action.type){\r\n case 'INSERT_ITEM':\r\n newState = state.slice()\r\n newState.push(action.item)\r\n return newState\r\n case 'CLEAR_ITEM':\r\n return []\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default items\r\n","function loginButton(state = {login: false, user: null, message: \"Ready\", isError: false}, action){\r\n switch(action.type){\r\n case 'LOGINED':\r\n console.log(\"LOGINED\")\r\n return {login: true, user: action.user, message: state.message, isError: state.isError}\r\n case 'UPDATE_MESSAGE':\r\n console.log(\"update message\",action)\r\n return {login: state.login, user: state.user, message: action.message, isError: state.isError}\r\n case 'ERROR':\r\n return {login: state.login, user: state.user, message: state.message, isError: true}\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default loginButton\r\n","function search(state = {keyword: \"\", results:[]}, action){\r\n switch(action.type){\r\n case 'SEARCH_UPDATE_KEYWORD':\r\n console.log(action)\r\n return {keyword: action.keyword, results: state.results}\r\n case 'SEARCH_UPDATE_RESULTS':\r\n return {keyword: state.keyword, results: action.results}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default search\r\n","function instantSearch(state = {results:{}}, action){\n switch(action.type){\n case 'INSTANT_SEARCH_UPDATE_RESULT':\n let s = {}\n for(let key in state.results){\n s[key] = state.results[key].slice()\n }\n s[action.keyword] = action.results\n return {results: s}\n case 'INSTANT_SEARCH_CLEAR':\n return {results: {}}\n default:\n return state\n }\n}\n\nexport default instantSearch\n","function modalList(state = {phase: \"NONE\", query: \"\", providers:[], providerIndex: 0, list:[], index: 0}, action){\r\n // phase: NONE, PROVIDERS, LIST\r\n /*\r\n index // list index\r\n list.title\r\n .image\r\n .text // insert this text\r\n */\r\n switch(action.type){\r\n case 'MODAL_LIST_UPDATE_QUERY':\r\n return {query: action.query, phase: state.phase, providers: state.providers, providerIndex: state.providerIndex , list: state.list, index: state.index, targetLine: state.targetLine}\r\n case 'MODAL_LIST_UPDATE_PROVIDERS':\r\n return {query: state.query, phase: \"PROVIDERS\", providers: action.providers, providerIndex: 0 , list: state.list, index: state.index, targetLine: state.targetLine}\r\n case 'MODAL_LIST_UPDATE_LIST':\r\n return {query: state.query, phase: \"LIST\", providers: state.providers, providerIndex: state.providerIndex , list: action.list, index: 0, targetLine: state.targetLine}\r\n case 'MODAL_LIST_UP':\r\n switch(state.phase){\r\n case \"LIST\":\r\n if(state.index > 0){\r\n return {query: state.query, phase: state.phase, providers: state.providers, providerIndex: state.providerIndex, list: state.list, index: state.index - 1, targetLine: state.targetLine}\r\n }\r\n break;\r\n case \"PROVIDERS\":\r\n if(state.providerIndex > 0){\r\n return {query: state.query, phase: state.phase, providers: state.providers, providerIndex: state.providerIndex - 1, list: state.list, index: state.index, targetLine: state.targetLine}\r\n }\r\n break;\r\n default:\r\n throw new Error(\"unknown phase\", state.phase)\r\n }\r\n return state\r\n case 'MODAL_LIST_DOWN':\r\n switch(state.phase){\r\n case \"LIST\":\r\n if(state.index < state.list.length - 1){\r\n return {query: state.query, phase: state.phase, providers: state.providers, providerIndex: state.providerIndex, list: state.list, index: state.index + 1, targetLine: state.targetLine}\r\n }\r\n break;\r\n case \"PROVIDERS\":\r\n if(state.providerIndex < state.providers.length - 1){\r\n return {query: state.query, phase: state.phase, providers: state.providers, providerIndex: state.providerIndex + 1, list: state.list, index: state.index, targetLine: state.targetLine}\r\n }\r\n break;\r\n default:\r\n throw new Error(\"unknown phase\", state.phase)\r\n }\r\n return state\r\n case 'MODAL_LIST_OPEN':\r\n return {query: state.query, phase: \"PROVIDERS\", providers: state.providers, providerIndex: state.providerIndex, list: [], index: 0, targetLine: {no: action.no, pos: action.pos, text: action.text}}\r\n case 'MODAL_LIST_CLOSE':\r\n return {query: state.query, phase: \"NONE\", providers: state.providers, providerIndex: state.providerIndex, list: [], index: 0, targetLine: state.targetLine}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default modalList\r\n","function popupMenu(state = {left: 0, top: 0, show: false, items:[]}, action){\r\n switch(action.type){\r\n case 'POPUP_SHOW':\r\n return {left: action.left, top: action.top, show: true, items: state.items}\r\n case 'POPUP_HIDE':\r\n return {left: state.left, top: state.top, show: false, items: state.items}\r\n case 'POPUP_UPDATE_ITEMS':\r\n return {left: state.left, top: state.top, show: state.show, items: action.items}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default popupMenu\r\n\r\n","import { combineReducers } from 'redux'\r\nimport lines from '../inline-editor/reducers/lines'\r\nimport cursor from '../inline-editor/reducers/cursor'\r\nimport items from './items'\r\nimport loginButton from './loginButton'\r\nimport search from './search'\r\nimport instantSearch from './instantSearch'\r\nimport modalList from './modalList'\r\nimport popupMenu from './popupMenu'\r\n\r\nfunction createFilteredReducer(reducerFunction, reducerPredicate){\r\n return (state, action) => {\r\n const isInitializationCall = state === undefined;\r\n const shouldRunWrappedReducer = reducerPredicate(action) || isInitializationCall\r\n return shouldRunWrappedReducer ? reducerFunction(state, action): state;\r\n }\r\n}\r\n\r\nexport default combineReducers({\r\n lines: createFilteredReducer(lines, action => action.name === \"main\"),\r\n cursor: createFilteredReducer(cursor, action => action.name === \"main\"),\r\n\r\n sideLines: createFilteredReducer(lines, action => action.name === \"side\"),\r\n sideCursor: createFilteredReducer(cursor, action => action.name === \"side\"),\r\n rightCursor: createFilteredReducer(cursor, action => action.name === \"right\"),\r\n rightLines: createFilteredReducer(lines, action => action.name === \"right\"),\r\n items,\r\n loginButton,\r\n search,\r\n instantSearch: createFilteredReducer(instantSearch, action => action.name === \"main\"),\r\n rightInstantSearch: createFilteredReducer(instantSearch, action => action.name === \"right\"),\r\n modalList,\r\n popupMenu,\r\n})\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { createStore } from 'redux'\r\nimport { Provider, batch } from 'react-redux'\r\n\r\nimport 'highlight.js/styles/dracula.css'; // choose your style!\r\nimport {mermaidAPI} from 'mermaid'\r\n\r\n// --- inline editor ---\r\nimport rootReducer from './reducers'\r\nimport App from './App'\r\nimport {insertLine, deleteLine, selectLine, setCursor, setReadOnly, deselectAll, clearAll, setTitle} from './inline-editor/actions'\r\nimport {insertItem, clearItem, logined, updateMessage, error, updateInstantResults,\r\n clearInstantResults,\r\n modalListUpdateProviders,\r\n modalListClose,\r\n showPopupMenu,\r\n hidePopupMenu,\r\n updatePopupMenu,\r\n} from './actions'\r\nimport './inline-editor/index.css';\r\nimport './index.css';\r\nimport {Render, isBlock, parseBlock} from './inline-editor/utils/render'\r\nimport {mermaidRender} from './inline-editor/render/mermaid.mjs'\r\nimport {parse} from './inline-editor/utils/inlineDecorator'\r\n// -- -- --\r\n\r\nconst store = createStore(rootReducer)\r\n//const unsubscribe = store.subscribe(() => console.log(\"state\",store.getState()))\r\n\r\nconst API_SERVER=process.env.REACT_APP_API_SERVER\r\nlet preAnalysisResult = null;\r\n\r\nglobal.mermaidRender = mermaidRender\r\nmermaidAPI.initialize({startOnLoad: true, theme: 'forest'});\r\n\r\nfunction loadLine(name, no, text, list){\r\n store.dispatch(insertLine(name, no, text, Render(name, no, text, context, store.dispatch)))\r\n}\r\n\r\nfunction getOpts(){\r\n var search = document.location.search\r\n search = search.replace(/^\\?/,\"\")\r\n var list = search.split(\"&\")\r\n var ret = {}\r\n list.forEach(function(item){\r\n let parts = item.split(\"=\")\r\n ret[parts[0]] = parts[1]\r\n })\r\n return ret\r\n}\r\n\r\nfunction postPage(user, id, body, lastUpdate, image){\r\n let f = new FormData()\r\n\r\n if(body.length === 0){\r\n store.dispatch(updateMessage(\"empty content update error\"))\r\n store.dispatch(error())\r\n return\r\n }\r\n f.append('body', body)\r\n f.append('lastUpdate', lastUpdate)\r\n f.append('cover', image)\r\n var req = new Request(API_SERVER + \"/page/\" + user + \"/\" + id, {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n 'User': user, // this header is deleted by login-proxy but useful for debug\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction loginCheck(user){\r\n let f = new FormData()\r\n f.append('user', user)\r\n var req = new Request(API_SERVER + \"/loginCheck\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n 'User': user, // this header is deleted by login-proxy but useful for debug\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction sendDelete(user, id){\r\n let f = new FormData()\r\n f.append('user', user)\r\n f.append('id', id)\r\n let req = new Request(API_SERVER + \"/delete\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n 'User': user, // this header is deleted by login-proxy but useful for debug\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction sendRename(from, to){\r\n let imgPathChange = (lines) => {\r\n // TODO: replace img tag\r\n }\r\n return savePromise().then(() => {\r\n let f = new FormData()\r\n f.append('from', from)\r\n f.append('to', to)\r\n f.append('user', global.user) // TODO: global.user\r\n let req = new Request(API_SERVER + \"/rename\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n // TODO: global.user\r\n 'User': global.user, // this header is deleted by login-proxy but useful for debug\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n })\r\n}\r\nfunction sendSimilar(keyword, collection){\r\n var arg = \"\";\r\n if(collection){\r\n arg = \"?collection=\"+encodeURIComponent(collection)\r\n }\r\n var req = new Request(\"https://inline-qdrant.inajob.freeddns.org/similar/\" + keyword + arg, {\r\n method: \"GET\",\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction sendSearch(keyword, noCache){\r\n let f = new FormData()\r\n f.append('keyword', keyword)\r\n f.append('user', global.user)\r\n f.append('noCache', noCache?\"1\":\"0\")\r\n var req = new Request(API_SERVER + \"/search\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\nfunction sendSearchCache(keyword){\r\n let f = new FormData()\r\n f.append('keyword', keyword)\r\n f.append('user', global.user)\r\n var req = new Request(API_SERVER + \"/search-cache\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\n\r\nglobal.sendSearch = sendSearch;\r\n\r\n// TODO: cache\r\nfunction sendSearchSchedule(){\r\n var req = new Request(API_SERVER + \"/search-schedule\", {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n },\r\n })\r\n return fetch(req)\r\n}\r\nglobal.sendSearchSchedule = sendSearchSchedule;\r\n\r\n\r\n\r\nfunction getPage(user, id){\r\n let r = Math.floor(Math.random()*1000)\r\n var req = new Request(API_SERVER + \"/page/\" + user + \"/\" + id + \"?r=\" + r, {\r\n method: \"GET\"\r\n })\r\n return fetch(req)\r\n}\r\nfunction getList(user){\r\n let r = Math.floor(Math.random()*1000)\r\n var req = new Request(API_SERVER + \"/page/\" + user + \"?r=\" + r, {\r\n method: \"GET\"\r\n })\r\n return fetch(req)\r\n}\r\nfunction getDetailList(user){\r\n let r = Math.floor(Math.random()*1000)\r\n var req = new Request(API_SERVER + \"/page/\" + user + \"?detail=1&r=\" + r, {\r\n method: \"GET\"\r\n })\r\n return fetch(req)\r\n}\r\nfunction getExternalKeywords(user){\r\n var req = new Request(API_SERVER + \"/web/external-keywords.json\", { // TODO: this is temporary path\r\n method: \"GET\"\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction getKeywords(user){\r\n let r = Math.floor(Math.random()*1000)\r\n var req = new Request(API_SERVER + \"/keywords/\" + user + \"?detail=1&r=\" + r, {\r\n method: \"GET\"\r\n })\r\n return fetch(req)\r\n}\r\n\r\nfunction grepToInstantSearch(grepLines, user, id) {\r\n let resultMap = {}\r\n grepLines.forEach((l) => {\r\n if(resultMap[l.user + \"/\" + l.id] || (l.user === user && encodeURIComponent(l.id) === id)){\r\n }else{\r\n resultMap[l.user + \"/\" + l.id] = {user: l.user, id: l.id, text: l.text, cover: l.cover}\r\n }\r\n })\r\n let result = []\r\n Object.keys(resultMap).forEach((k) => {\r\n result.push(resultMap[k])\r\n })\r\n return result;\r\n}\r\n\r\nglobal.detailList = []\r\n\r\nfunction loadKeywords(){\r\n return getKeywords(opts.user).then(function(resp){\r\n return resp.json().then(function(o){\r\n if(o.keywords){\r\n context.keywords = o.keywords\r\n return o.keywords\r\n }\r\n })\r\n })\r\n}\r\nfunction loadExternalKeywords(){\r\n return getExternalKeywords(opts.user).then(function(resp){\r\n return resp.json().then(function(o){\r\n context.externalKeywords = o\r\n return o.keywords\r\n }).catch((e) => {console.log(e)})\r\n })\r\n}\r\n\r\n\r\nfunction loadList(){\r\n return getList(opts.user).then(function(resp){\r\n return resp.json().then(function(o){\r\n if(o.keywords){\r\n let nameList = o.keywords.map((k) => {return {name: k}})\r\n context.list = nameList\r\n batch(() =>{\r\n nameList.forEach(function(item){\r\n store.dispatch(insertItem(item))\r\n })\r\n })\r\n\r\n return nameList\r\n }\r\n /*\r\n if(o.pages){\r\n let nameList = o.pages;\r\n global.list = nameList\r\n batch(() =>{\r\n nameList.forEach(function(item){\r\n item.modTime = new Date(item.modTime);\r\n store.dispatch(insertItem(item))\r\n })\r\n })\r\n return nameList\r\n }\r\n */\r\n })\r\n })\r\n}\r\n\r\nlet opts = getOpts()\r\nlet meta = {} // cover, lastUpdate\r\nglobal.user = opts.user // TODO: manage context?\r\nlet context = {\r\n list: [],\r\n keywords: [],\r\n externalKeywords: [],\r\n detailList: [],\r\n sendSearchSchedule,\r\n sendSearch,\r\n getDetailList,\r\n user: opts.user,\r\n}\r\n\r\nstore.dispatch(modalListUpdateProviders([\r\n {name: \"rename\"},\r\n {name: \"page\"},\r\n {name: \"amazon\"},\r\n {name: \"aliexpress\"},\r\n]))\r\nstore.dispatch(modalListClose())\r\n\r\nfunction loginCheckFunc(){\r\n return loginCheck(opts.user).then(function(resp){\r\n return resp.json().then(function(o){\r\n if(!o.editable){\r\n store.dispatch(setReadOnly(\"main\"))\r\n }\r\n if(o.login){\r\n store.dispatch(logined(o.user))\r\n }\r\n return o\r\n })\r\n })\r\n}\r\n\r\nPromise.all([\r\n loadKeywords(),\r\n loadList(),\r\n loginCheckFunc(),\r\n loadExternalKeywords(),\r\n])\r\n .then(function(values){\r\n //let keywords = values[0] // no use\r\n let list = values[1]\r\n let login = values[2]\r\n list.forEach((p) => {\r\n let index = -1\r\n context.keywords.forEach((k, i) => {\r\n if(k.keyword === p.name){\r\n index = i\r\n }\r\n })\r\n if(index === -1){\r\n context.keywords.push({keyword: p.name, count: 2})\r\n }else{\r\n context.keywords[index].count += 1;\r\n }\r\n })\r\n // Page require List\r\n function loadPage(name, isMain, user, id){\r\n return getPage(user, id).then(function(resp){\r\n let keywords = [\"[\" + decodeURIComponent(id) + \"]\"] // link search\r\n store.dispatch(clearInstantResults(name))\r\n store.dispatch(setTitle(name, decodeURIComponent(id)))\r\n let instantSearch = () => {\r\n keywords.forEach((k, i) => {\r\n sendSearch(k, false).then((resp) => {\r\n store.dispatch(updateInstantResults(name, k, [{text:\"loading...\"}]))\r\n resp.json().then((o) => {\r\n let lines = o.lines\r\n let is = grepToInstantSearch(lines, user, id)\r\n store.dispatch(updateInstantResults(name, k, is))\r\n })\r\n })\r\n })\r\n sendSimilar(id).then((resp) => {\r\n store.dispatch(updateInstantResults(name, \"sim:\" + decodeURIComponent(id), [{text:\"loading...\"}]))\r\n resp.json().then((o) => {\r\n let is = []\r\n o.forEach((p) => {\r\n is.push({user: user, id: p.title, text: p.text, cover: \"\"})\r\n })\r\n store.dispatch(updateInstantResults(name, \"sim:\" + decodeURIComponent(id), is))\r\n })\r\n })\r\n sendSimilar(id, \"nishio\").then((resp) => {\r\n store.dispatch(updateInstantResults(name, \"n:\" + decodeURIComponent(id), [{text:\"loading...\"}]))\r\n resp.json().then((o) => {\r\n let is = []\r\n o.forEach((p) => {\r\n is.push({\r\n user: user, id: p.title, url: \"https://scrapbox.io/nishio/\" + encodeURIComponent(p.title),\r\n text: p.text.slice(0,40),\r\n cover: \"\"\r\n })\r\n })\r\n store.dispatch(updateInstantResults(name, \"n:\" + decodeURIComponent(id), is))\r\n })\r\n })\r\n sendSimilar(id, \"tweets_ina_ani\").then((resp) => {\r\n store.dispatch(updateInstantResults(name, \"x:\" + decodeURIComponent(id), [{text:\"loading...\"}]))\r\n resp.json().then((o) => {\r\n let is = []\r\n o.forEach((p) => { \r\n is.push({\r\n user: user, id: p.title, url: \"https://twitter.com/ina_ani/status/\" + encodeURIComponent(p.title),\r\n text: p.text.slice(0,40),\r\n cover: \"\"\r\n })\r\n })\r\n store.dispatch(updateInstantResults(name, \"x:\" + decodeURIComponent(id), is))\r\n })\r\n })\r\n }\r\n if(resp.ok === false){\r\n if(login.login && login.user === user){\r\n keywords.push(decodeURIComponent(id)) // full search\r\n }\r\n instantSearch()\r\n }else{\r\n resp.json().then(function(o){\r\n console.log(o)\r\n if(isMain){\r\n //meta = o.meta\r\n Object.assign(meta, o.meta)\r\n }\r\n let inBlock = false\r\n let blockBody;\r\n let index = 0;\r\n batch(() => {\r\n let lines = o.body.split(/[\\r\\n]/)\r\n lines.forEach(function(line, i){\r\n if(inBlock){\r\n if(line === \"<<\"){ // end of block\r\n loadLine(name, index, blockBody, list)\r\n inBlock = false\r\n index ++;\r\n }else{\r\n blockBody += \"\\n\" + line\r\n }\r\n }else{\r\n if(isBlock(line)){ // start of block\r\n inBlock = true\r\n blockBody = line\r\n }else{ // not block line\r\n if(!(i === lines.length - 1 && line.length === 0)){ // skip tail\r\n loadLine(name, index, line, list)\r\n index ++;\r\n }\r\n }\r\n }\r\n })\r\n let result = analysis(name)\r\n preAnalysisResult = result; // save result for check missing keywords\r\n keywords = keywords.concat(result.keywords.map((k) => \"[\" + k +\"]\"))\r\n if(login.login && login.user === user){\r\n keywords.push(decodeURIComponent(id)) // full search\r\n }\r\n instantSearch()\r\n })\r\n })\r\n }\r\n })\r\n }\r\n // load side page\r\n loadPage(\"side\", false, opts.user, \"menu\")\r\n // load right page\r\n loadPage(\"right\", false, opts.user, \"menu\")\r\n // load main page\r\n loadPage(\"main\", true, opts.user, opts.id)\r\n\r\n // for SPA\r\n document.getElementById('root').addEventListener(\"click\", (e)=> {\r\n let rightTo = e.srcElement.dataset.id\r\n let jumpTo = e.srcElement.dataset.jump\r\n if(rightTo){\r\n let rect = e.srcElement.getBoundingClientRect()\r\n let keywords = [];\r\n\r\n Object.keys(context.externalKeywords).forEach((p) => {\r\n let ks = context.externalKeywords[p].filter((k) => k.title === rightTo).map((k) => {return {\r\n title: p + \"/\" + k.title,\r\n link: \"https://scrapbox.io/\" + encodeURIComponent(p) + \"/\" + encodeURIComponent(k.title)\r\n }})\r\n if(ks.length !== 0){\r\n keywords.push(ks[0])\r\n }\r\n })\r\n console.log(keywords)\r\n if(keywords.length > 0){\r\n store.dispatch(showPopupMenu(rect.left, rect.top + 16))\r\n store.dispatch(updatePopupMenu(keywords))\r\n }\r\n\r\n store.dispatch(clearAll(\"right\"))\r\n loadPage(\"right\", false, opts.user, encodeURIComponent(rightTo))\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n else if(jumpTo){\r\n store.dispatch(clearAll(\"main\"))\r\n const url = new URL(window.location)\r\n url.search = \"?user=\" + encodeURIComponent(opts.user) + \"&id=\" + encodeURIComponent(jumpTo)\r\n window.history.pushState({},\"\", url)\r\n document.title = jumpTo\r\n opts.id = encodeURIComponent(jumpTo)\r\n store.dispatch(clearItem())\r\n loadList().then(() => {\r\n loadPage(\"main\", true, opts.user, encodeURIComponent(jumpTo))\r\n })\r\n e.preventDefault()\r\n }else{\r\n store.dispatch(hidePopupMenu())\r\n }\r\n }, false)\r\n\r\n // for browser back\r\n window.onpopstate = function(e){\r\n let lopts = getOpts()\r\n opts.id = lopts.id\r\n store.dispatch(clearAll(\"main\"))\r\n document.title = decodeURIComponent(opts.id)\r\n store.dispatch(clearItem())\r\n loadList().then(function(){\r\n loadPage(\"main\", true, opts.user, opts.id)\r\n })\r\n }\r\n})\r\n\r\ntry{\r\n document.getElementById(\"body\").style.display = \"none\"\r\n}catch(e){\r\n console.log(e)\r\n}\r\n\r\nfunction analysis(name){\r\n let keywords = []\r\n let images = []\r\n // TODO: nested wiki link\r\n let lines;\r\n if(name === \"main\"){\r\n lines = store.getState().lines\r\n }else{\r\n lines = store.getState().rightLines\r\n }\r\n lines.forEach((item) => {\r\n if(!isBlock(item.text)){\r\n let parsed = parse(item.text)\r\n parsed.forEach((l) => {\r\n if(Array.isArray(l)){\r\n if(l[0] === \"wikilink\"){\r\n if(keywords.indexOf(l[1].body) === -1){\r\n keywords.push(l[1].body)\r\n }\r\n }\r\n }\r\n })\r\n }else{\r\n //\r\n let blockInfo = parseBlock(item.text)\r\n if(blockInfo.type === \"img\"){\r\n if(blockInfo.body[0].indexOf(\"http://\")===0 || blockInfo.body[0].indexOf(\"https://\")===0){\r\n images.push(blockInfo.body[0])\r\n }else{\r\n images.push(API_SERVER + '/img/' + blockInfo.body[0])\r\n }\r\n }else if(blockInfo.type === \"item\"){\r\n images.push(blockInfo.body[1]);\r\n }\r\n }\r\n })\r\n console.log(\"Analysis\", images)\r\n return {\r\n keywords,\r\n images,\r\n }\r\n}\r\n\r\nfunction savePromise(filter){\r\n let result = analysis(\"main\")\r\n let images = result.images;\r\n let lines = store.getState().lines\r\n if(filter){\r\n lines = filter(lines);\r\n }\r\n let rawLines = lines.map((item) => {\r\n if(isBlock(item.text)){\r\n return item.text + \"\\n<<\"\r\n }else{\r\n return item.text\r\n }\r\n }).join(\"\\n\")\r\n console.log(rawLines)\r\n let lastUpdate = \"\"\r\n let image = \"\"\r\n if(meta && meta.lastUpdate){lastUpdate = meta.lastUpdate}\r\n if(images.length > 0){image = images[0]}\r\n return postPage(opts.user, opts.id, rawLines, lastUpdate, image).then(function(resp){\r\n if(resp.ok){\r\n store.dispatch(updateMessage(\"Saved\"))\r\n return resp.json()\r\n }else{\r\n store.dispatch(updateMessage(\"Save Error\"))\r\n store.dispatch(error())\r\n }\r\n })\r\n}\r\n\r\nlet saving = false;\r\nlet waiting = false;\r\nfunction save(){\r\n saving = true;\r\n savePromise().then(async (o) => {\r\n //meta = o.meta // update meta\r\n Object.assign(meta, o.meta)\r\n\r\n // update Search cache\r\n let result = analysis(\"main\")\r\n let keywords = [\"[\" + decodeURIComponent(opts.id) + \"]\"] // link search\r\n // add missing keywords for cleaning keyword cache\r\n if(preAnalysisResult){\r\n preAnalysisResult.keywords.forEach((k) => {\r\n if(result.keywords.indexOf(k) === -1){\r\n keywords.push(\"[\" + k + \"]\")\r\n }\r\n })\r\n }\r\n keywords = keywords.concat(result.keywords.map((k) => \"[\" + k +\"]\"))\r\n let instantSearch = async () => {\r\n await Promise.all(\r\n keywords.map(async k => {\r\n await sendSearchCache(k).then((resp) => {\r\n resp.text().then((o) => {\r\n console.log(\"search cache queue length\",o)\r\n })\r\n })\r\n })\r\n )\r\n }\r\n preAnalysisResult = result;\r\n saving = false; // TODO: this cause server overload, but fast user interaction\r\n await instantSearch();\r\n store.dispatch(updateMessage(\"Update Cache OK\"))\r\n })\r\n}\r\n\r\nvar timerID = null\r\nfunction onUpdate(o){\r\n if(timerID != null){\r\n clearTimeout(timerID)\r\n timerID = null\r\n }\r\n if(waiting){return} // waiting queue length == 1\r\n\r\n let waitAndSave = () => {\r\n if(saving === false){\r\n waiting = false;\r\n timerID = setTimeout(save, 1000)\r\n }else{\r\n // now in saving\r\n waiting = true\r\n setTimeout(() => {\r\n waitAndSave()\r\n }, 1000);\r\n }\r\n }\r\n waitAndSave();\r\n}\r\n\r\nfunction onLoginClick(){\r\n document.location.href = API_SERVER + \"/auth/login\"\r\n}\r\nfunction onLogoutClick(){\r\n console.log(\"click logout\")\r\n document.location.href = API_SERVER + \"/auth/logout\"\r\n}\r\nfunction onNewDiary(){\r\n let d = new Date();\r\n let id = \"\" + d.getFullYear() + \"-\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"-\" + (\"0\" + d.getDate()).slice(-2)\r\n document.location.href = \"?user=\" + opts.user + \"&id=\" + id\r\n}\r\nfunction onNewJunk(){\r\n let d = new Date();\r\n let id = \"\" + d.getFullYear() + \"-\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"-\" + (\"0\" + d.getDate()).slice(-2) + \"-\" + (\"0\" + d.getHours()).slice(-2) + (\"0\" + d.getMinutes()).slice(-2) + (\"0\" + d.getSeconds()).slice(-2)\r\n document.location.href = \"?user=\" + opts.user + \"&id=\" + id\r\n}\r\nfunction onDelete(user, id){\r\n return () => {\r\n sendDelete(user, id)\r\n .then(resp => resp.json())\r\n .then((o) => {\r\n console.log(o)\r\n document.location = \"?user=\" + user + \"&id=FrontPage\"\r\n })\r\n }\r\n}\r\n\r\nfunction uploadFile(file){\r\n let f = new FormData()\r\n f.append('img', file)\r\n var req = new Request(API_SERVER + \"/img/\" + opts.user + \"/\" + opts.id, {\r\n method: \"POST\",\r\n credentials: \"include\", // for save another domain\r\n headers: {\r\n 'Accept': 'applicatoin/json',\r\n 'User': opts.user, // this header is deleted by login-proxy but useful for debug\r\n },\r\n body: f,\r\n })\r\n return fetch(req)\r\n}\r\n\r\nstore.dispatch(setReadOnly(\"side\"))\r\nstore.dispatch(setReadOnly(\"right\"))\r\n/*\r\nloadLine(0, \"# React.jsで作ったインラインマークダウンエディタ\")\r\nloadLine(1, \"インラインで編集ができる書式付きエディタです。\")\r\nloadLine(2, \"http://inajob.hatenablog.jp URL自動リンクに対応しました。\")\r\nloadLine(3, \"ブロック記法に対応しました\")\r\nloadLine(4, \"## 整形済みテキスト\")\r\nloadLine(5, \">> pre\\n ∧,,∧\\n ( `・ω・)\\n / ∽ |\")\r\nloadLine(6, \"## シンタックスハイライト\")\r\nloadLine(7, \">> code\\n//ソースコードみたいなの\\nfunction hoge(){\\n alert('Hello World');\\n}\")\r\nloadLine(8, \"## mermaidによる作画\")\r\nloadLine(9, \">> mermaid\\ngraph LR\\n図も描けます\\nPlugin --> Pre\\n Plugin --> Mermaid\")\r\nloadLine(10, \"# 作った人\")\r\nloadLine(11, \"https://twitter.com/ina_ani\")\r\nloadLine(12, \"# GitHub\")\r\nloadLine(13, \"https://github.com/inajob/inline-editor\")\r\n*/\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\nfunction setupPaste(){\r\n console.log(\"setupPaste\");\r\n // --- only supports chrome/edge ---\r\n document.addEventListener(\"paste\", function(event){\r\n console.log(\"paste\");\r\n var items = (event.clipboardData || event.originalEvent.clipboardData).items;\r\n console.log(items.length);\r\n for(let i = 0; i < items.length; i ++){\r\n console.log(items[i]);\r\n if(items[i].type.indexOf(\"image\") !== -1){\r\n // find image\r\n console.log(\"capture image\");\r\n var blob = items[i].getAsFile();\r\n\r\n uploadFile(blob).then(function(resp){\r\n if(!resp.ok){\r\n alert(\"Error:\" + resp.statusText)\r\n }else{\r\n resp.json().then(function(o){\r\n let no = store.getState().cursor.row;\r\n let imgId = o.imgId\r\n let line = \">> img\\n\" + opts.user + '/'+ opts.id + '/' + imgId\r\n store.dispatch(insertLine(\"main\", no,line , Render(\"main\", no, line, global)))\r\n save()\r\n })\r\n }\r\n }).catch(error => {\r\n alert(\"Catch Error: \" + error)\r\n })\r\n return false;\r\n }\r\n }\r\n //event.preventDefault();\r\n return true;\r\n });\r\n}\r\nsetupPaste();\r\n\r\nlet setupSelection = () => {\r\n let findLine = (e) => {\r\n if(e == null)return null;\r\n if(e.classList && e.classList.contains(\"line\")){return e}\r\n return findLine(e.parentNode)\r\n }\r\n let selected = false\r\n let fromNo = -1;\r\n let toNo = -1;\r\n document.addEventListener(\"selectionchange\", (e) => {\r\n let sel = document.getSelection()\r\n let fromLine = findLine(sel.anchorNode)\r\n let toLine = findLine(sel.focusNode)\r\n if(fromLine && toLine){\r\n fromNo = parseInt(fromLine.dataset.lineno)\r\n toNo = parseInt(toLine.dataset.lineno)\r\n if(fromNo !== toNo){\r\n selected = true\r\n store.dispatch(setCursor(\"main\", - 1, 0, true))\r\n }\r\n }\r\n })\r\n document.addEventListener(\"mouseup\", (e) => {\r\n if(selected){\r\n selected = false;\r\n store.dispatch(deselectAll(\"main\"))\r\n for(let i = fromNo; i <= toNo; i ++){\r\n // TODO: batch\r\n store.dispatch(selectLine(\"main\", i, true))\r\n }\r\n let selectedLines = store.getState().lines.slice(fromNo, toNo + 1)\r\n let out = [];\r\n selectedLines.forEach((l) => {\r\n if(isBlock(l.text)){\r\n out.push(l.text + \"\\n<<\\n\")\r\n }else{\r\n out.push(l.text)\r\n }\r\n })\r\n let selectedSource = out.join(\"\\n\")\r\n return navigator.clipboard.writeText(selectedSource).then(function() {\r\n //alert('コピーしました')\r\n }).catch(function(error) {\r\n alert((error && error.message) || 'コピーに失敗しました')\r\n })\r\n\r\n }\r\n })\r\n document.addEventListener(\"keydown\", (e) => {\r\n if(document.body === e.srcElement){\r\n if(e.keyCode === 8){ // BS\r\n let isSelected = store.getState().lines.some((l) => l.selected === true)\r\n if(isSelected){\r\n for(let i = fromNo; i <= toNo; i ++){\r\n store.dispatch(deleteLine(\"main\", fromNo))\r\n }\r\n store.dispatch(setCursor(\"main\", fromNo, 0, true))\r\n save();\r\n }\r\n }\r\n }\r\n })\r\n}\r\n\r\nsetupSelection()\r\n","var map = {\n\t\"./locale\": 348,\n\t\"./locale.js\": 348\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 722;","// MCE Language\r\n// Ver2\r\n\r\nvar Gin = require(\"./gin.js\")\r\nvar MersenneTwister = require(\"./mt.js\")\r\n\r\nvar MCL = function(){\r\n //==============================\r\n // Parser\r\n //==============================\r\n this.parser = new Gin.Gin.Grammar({\r\n Stmnt: /Cmp:cmp | [!] ARG:push [=] Cmp:assign/, // 代入演算、即値\r\n Cmp: / Expr ([<] Expr:gt | [>] Expr:lt | [==] Expr:eq | [!=] Expr:neq)* /, // 比較演算\r\n Expr: / Term ([+] Term:add | [-] Term:sub)* /, // 加減演算\r\n Term: / Fctr ([*] Fctr:mul | [/] Fctr:div | [%] Fctr:mod)* /, // 乗除演算\r\n // 数字、変数、関数、文字列、括弧\r\n Fctr: / $DECIMAL:fpush | Def | Call | $JS_STRING:push | [(] Cmp:pushn [)] /,\r\n // 変数、関数呼び出し[ブロック付き]\r\n Call: /(ARG:vpush|[(] Cmp[)]):callBegin ((\"(\" ARGLIST{0,1} \")\":prepareBlock ((\"{\" PROGRAM \"}\"){0,1}):funcBody) {0,1}):funcCall/,\r\n // 関数定義\r\n Def: /[\\\\]:defBegin (\"(\" ARGLIST{0,1} \")\":prepareBlock \"{\" PROGRAM \"}\":funcBody):funcDef/,\r\n\r\n // プログラム全行\r\n PROGRAM: /((LINE:line (<;>){0,1})*)/,\r\n LINE: /Stmnt COMM/, //ブロック解析\r\n COMM: /<(\\/\\/[^\\r\\n]*|)>/, //コメント\r\n ARGLIST: /Stmnt:arg (',' ARGLIST){0,1}/, // 引数リスト\r\n ARG: /<[a-zA-Z][a-zA-Z0-9]*>/, //識別子\r\n },\"PROGRAM\", new Gin.Gin.Parser.RegExp(/[ \\r\\n]/));\r\n this.calcAction = {\r\n _stack: [],\r\n argList:[],\r\n varList:[],\r\n block:[[]],\r\n out:[],\r\n push: function (v) { this._stack.push([\"imm\", v + \"\"]); }, // 即値\r\n fpush: function (v) { this._stack.push([\"imm\", parseFloat(v + \"\")]); }, // 即値(数字)\r\n vpush: function (v) { this._stack.push([\"variable\", (v + \"\")]); }, // 変数\r\n pushn: function (v) { }, //何もしない\r\n callBegin:function(v){ // 識別子オブジェクトを作成\r\n this.argList.push([]);\r\n this.varList.push(this._stack.pop());\r\n },\r\n defBegin:function(v){ // 識別子オブジェクトを作成\r\n this.argList.push([]);\r\n },\r\n funcCall: function(v){ // 識別子オブジェクトに 引数リストオブジェクトを突っ込む\r\n var l = this.argList.pop();\r\n if(v.length === 0){ // 識別子の後ろに引数リストがない場合は変数\r\n this._stack.push(this.varList.pop());\r\n }else{ // 引数リストがある場合は関数呼び出し\r\n var b = this._stack.pop();\r\n if(b === null){\r\n this._stack.push([\"func\",this.varList.pop(),l,[]]);\r\n }else{\r\n this._stack.push([\"func\",this.varList.pop(),l,b]);\r\n }\r\n }\r\n },\r\n funcDef: function(v){ // 識別子オブジェクトに 引数リストオブジェクトを突っ込む\r\n var l = this.argList.pop();\r\n var b = this._stack.pop();\r\n if(b === null){ // TODO: ここを通るケースがあるのか?\r\n this._stack.push([\"def\",l,[]]);\r\n }else{\r\n this._stack.push([\"def\",l,b]);\r\n }\r\n },\r\n prepareBlock:function(v){ // blockを入れるための空リストを用意\r\n this.block.push([]);\r\n },\r\n funcBody: function(v){ // 識別子オブジェクトに 関数ボディオブジェクトを突っ込む\r\n if(v.length === 0){ // Callの際 Bodyが無い場合がある\r\n this._stack.push(null); // Bodyは無いのでnullを入れる\r\n this.block.pop();\r\n }else{ // Bodyをひとまず_stackに入れる\r\n this._stack.push(this.block.pop());\r\n }\r\n },\r\n assign:function(v){ // 左辺値と 右辺値を取り出して 代入オブジェクトを作成\r\n var cmp = this._stack.pop();\r\n var vs = this._stack.pop();\r\n this._stack.push([\"assign\",vs,cmp]);\r\n },\r\n cmp:function(v){ // もうここでやることはない\r\n //var a = this._stack[this._stack.length - 1]; // TODO: 削除してよい\r\n },\r\n // 行オブジェクトの作成\r\n line: function(v){\r\n var tmp = this._stack.pop();\r\n this.block[this.block.length - 1].push(tmp);\r\n },\r\n // 引数リストの追加\r\n arg:function(v){\r\n this.argList[this.argList.length - 1].push(this._stack.pop());\r\n },\r\n // 二項演算オブジェクトの作成\r\n neq: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"neq\",l,r]);},\r\n eq: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"eq\",l,r]);},\r\n lt: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"lt\",l,r]);},\r\n gt: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"gt\",l,r]);},\r\n add: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"add\",l,r]);},\r\n sub: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"sub\",l,r]); },\r\n mul: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"mul\",l,r]); },\r\n div: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"div\",l,r]); },\r\n mod: function (v) {var r = this._stack.pop(), l = this._stack.pop(); this._stack.push([\"mod\",l,r]); },\r\n\r\n };\r\n};\r\nMCL.prototype = {\r\n preProcess:function(s){\r\n // プリプロセッサ\r\n // - コメントの除去\r\n // - インデントを`{` `}`に変換\r\n var l = s.split(/[\\r\\n]+/);\r\n var i, j;\r\n var count = 0;\r\n var stack = [0];\r\n var pre = 0;\r\n var out = \"\";\r\n for(i = 0; i < l.length; i ++){\r\n // 行頭コメント`//`はここで消す\r\n l[i] = l[i].replace(/^\\s*\\/\\/.*$/,\"\");\r\n if(l[i].length === 0)continue;\r\n // インデントの数を数える\r\n count = 0;\r\n for(j = 0; j < l[i].length; j ++){\r\n if(l[i][j] === ' '){\r\n count ++;\r\n }else{\r\n break;\r\n }\r\n }\r\n pre = stack[stack.length - 1];\r\n if(pre === count){ // インデント幅が同じ\r\n // nothing to do\r\n out += l[i] + '\\n';\r\n }else{ // インデント幅が異なる\r\n if(pre < count){ // インデントが深くなった時\r\n out += '{\\n' + l[i] + '\\n';\r\n stack.push(count);\r\n }else{ // インデントが浅くなった時\r\n while(stack.length > 0){\r\n stack.pop();\r\n out += '}\\n';\r\n if(stack[stack.length - 1] === count){\r\n break;\r\n }\r\n }\r\n out += l[i] + '\\n';\r\n }\r\n }\r\n }\r\n for(i = 0; i < stack.length - 1; i ++){\r\n out += '}';\r\n }\r\n return out;\r\n },\r\n parse:function(s){\r\n // ginのパーサーに通す\r\n this.calcAction.block = [[]];\r\n this.rawOut = this.parser.parse(s, this.calcAction)\r\n\r\n if(this.rawOut.full === false){ // パーサがすべてを解釈できない場合\r\n //var ss = \"\";\r\n //for(var x in this.rawOut){\r\n // ss += x + \":\" + this.rawOut[x] + \"\\n\";\r\n //}\r\n throw new Error(\"syntax error before [\" + s.slice(this.rawOut.lastIndex) + \"]\");\r\n }\r\n //console.log(\"src \"+s)\r\n //console.log(this.rawOut)\r\n // パース済みブロックを返却する\r\n return this.calcAction.block;\r\n }\r\n};\r\n\r\nfunction Affine(){\r\n this.data=[[1,0,0],[0,1,0],[0,0,1]];\r\n if(arguments.length === 9){\r\n this.data = [\r\n [arguments[0],arguments[1],arguments[2]],\r\n [arguments[3],arguments[4],arguments[5]],\r\n [arguments[6],arguments[7],arguments[8]]\r\n ];\r\n }else if(arguments.length === 0){\r\n }else{\r\n throw new Error(\"arguments size error\");\r\n }\r\n}\r\n\r\n// スコープを表現\r\nvar Scope = function(){\r\n this.body = {};\r\n this.next = null;\r\n}\r\n\r\n// Magical Circle Environemnt\r\nvar MCE = function(){\r\n this.mt = new MersenneTwister.MersenneTwister(0);\r\n this.date = new Date();\r\n this.scope = null; // Scopeの先頭(単方向リスト)\r\n this.externalVar = {}; // 外部変数\r\n this.externalVarRequest = {}; // 外部変数要求\r\n this.description = \"\";\r\n this.out = \"\";\r\n};\r\nMCE.prototype = {\r\n // 変数のスコープを作成\r\n createScope:function(){\r\n var prevScope = this.scope;\r\n this.scope = new Scope();\r\n this.scope.next = prevScope;\r\n },\r\n // 変数のスコープを破棄\r\n destroyScope:function(){\r\n if(this.scope === null){\r\n throw new Error(\"error no more scope\");\r\n }\r\n this.scope = this.scope.next;\r\n },\r\n // 今のスタックに 名前、値を紐付ける\r\n bindVariable: function(name, value){\r\n this.scope.body[name] = value;\r\n },\r\n // スタックをあがっていってその名前の変数があれば値を紐付ける\r\n setVariable:function(name, value){\r\n var t = this.scope;\r\n while(t){\r\n if(t.body[name] !== undefined){\r\n t.body[name] = value;\r\n break;\r\n }\r\n t = t.next;\r\n }\r\n if(!t){\r\n // どこにもない場合はローカルにしてみる?\r\n this.scope.body[name] = value;\r\n }\r\n },\r\n // 変数の値の解決\r\n getVariable:function(name){\r\n var t = this.scope;\r\n while(t){\r\n if(t.body[name] !== undefined){\r\n return t.body[name];\r\n }\r\n t = t.next;\r\n }\r\n return undefined;\r\n },\r\n run:function(obj){\r\n this.out = \"\";\r\n this.extArgs = [];\r\n this.createScope();\r\n\r\n // ビルトイン関数の登録\r\n // ID 仮引数 処理本体 識別子\r\n this.setVariable('if',['builtin',[['variable','cond']],[],'if']);\r\n this.setVariable('blockif',['builtin',[['variable','cond']],[],'blockif']);\r\n this.setVariable('not',['builtin',[['variable','target']],[],'not']);\r\n this.setVariable('loop',['builtin',[['variable','max']],[],'loop']);\r\n this.setVariable('write',['builtin',[['variable','str']],[],'write']);\r\n this.setVariable('getExternalVar',['builtin',[['variable','label'],['variable','initial']],[],'getExternalVar']);\r\n this.setVariable('addDescription',['builtin',[['variable','type'],['variable','text']],[],'addDescription']);\r\n this.setVariable('eval',['builtin',[['variable','class'],['variable','method']],[],'eval']);\r\n this.setVariable('evalAllExtArgs',['builtin',[],[],'evalAllExtArgs']);\r\n this.setVariable('evalExtArg',['builtin',[['variable','n']],[],'evalExtArg']);\r\n this.setVariable('extArgsLength',['builtin',[],[],'extArgsLength']);\r\n this.setVariable('block',['builtin',[],[],'block']);\r\n var self = this;\r\n this.setVariable('rand',['builtin',[],[],'js', function(){return self.mt.next()}]);\r\n // ==== STRING ====\r\n this.setVariable('stringLength',['builtin',[['variable','str']],[],'js', function(){\r\n var s = self.getVariable('str');\r\n var n;\r\n if(s){ n = s.length; }\r\n return n;\r\n }]);\r\n this.setVariable('stringCharAt',['builtin',[['variable','str'],['variable','n']],[],'js', function(){\r\n return self.getVariable('str')[self.getVariable('n')];\r\n }]);\r\n\r\n // ==== DATE ====\r\n this.setVariable('dateGetFullYear',['builtin',[],[],'js', function(){\r\n return self.date.getFullYear();\r\n }]);\r\n this.setVariable('dateGetYear',['builtin',[],[],'js', function(){\r\n return self.date.getYear();\r\n }]);\r\n this.setVariable('dateGetMonth',['builtin',[],[],'js', function(){\r\n return self.date.getMonth();\r\n }]);\r\n this.setVariable('dateGetDay',['builtin',[],[],'js', function(){\r\n return self.date.getDay();\r\n }]);\r\n this.setVariable('dateGetHours',['builtin',[],[],'js', function(){\r\n return self.date.getHours();\r\n }]);\r\n this.setVariable('dateGetMinutes',['builtin',[],[],'js', function(){\r\n return self.date.getMinutes();\r\n }]);\r\n this.setVariable('dateGetSeconds',['builtin',[],[],'js', function(){\r\n return self.date.getSeconds();\r\n }]);\r\n\r\n // ==== ARRAY ====\r\n this.setVariable('arrayInit',['builtin',[],[],'js', function(){\r\n return [];\r\n }]);\r\n this.setVariable('arraySet',['builtin',[['variable','vname'],['variable','index'],['variable','target']],[],'js', function(){\r\n var arr = self.getVariable('vname');\r\n arr[self.getVariable('index')] = self.getVariable('target');\r\n return self.getVariable('target');\r\n }]);\r\n this.setVariable('arrayGet',['builtin',[['variable','vname'],['variable','index']],[],'js', function(){\r\n var arr = self.getVariable('vname');\r\n return arr[self.getVariable('index')];\r\n }]);\r\n this.setVariable('arrayCount',['builtin',[['variable','vname']],[],'js', function(){\r\n var arr = self.getVariable('vname');\r\n return arr.length;\r\n }]);\r\n this.setVariable('arrayPop',['builtin',[['variable','vname']],[],'js', function(){\r\n var arr = self.getVariable('vname');\r\n return arr.pop();\r\n }]);\r\n this.setVariable('arrayPush',['builtin',[['variable','vname'],['variable','target']],[],'js', function(){\r\n var arr = self.getVariable('vname');\r\n arr.push(self.getVariable('target'));\r\n return self.getVariable('target');\r\n }]);\r\n\r\n var ret;\r\n for(var i=0; i < obj.length; i ++){\r\n ret = this.execute(obj[i]);\r\n }\r\n this.destroyScope();\r\n return ret;\r\n },\r\n execute: function(obj){\r\n var ret;\r\n for(var i = 0; i < obj.length; i ++){\r\n if(this[obj[i][0]]){ // パーサー返却値の0番目は内部識別子が格納されている\r\n // 内部識別子名がそのままMCEのメソッド名となっている\r\n ret = this[obj[i][0]].apply(this,obj[i].slice(1));\r\n }else{\r\n throw new Error(\"unknown op-code [\" + obj[i][0] + \"]\");\r\n }\r\n }\r\n return ret; // 最後の実行結果を返す\r\n },\r\n // 関数オブジェクト\r\n def: function(vArgList, block){\r\n // ユーザ定義関数の呼び出し\r\n var out;\r\n // ID, 仮引数, 処理本体, 環境\r\n out = ['lambda', vArgList, block, this.scope];\r\n return out;\r\n },\r\n // 関数呼び出し\r\n func: function(obj, argList, extArgs){\r\n // 関数呼び出し関数そのものの評価\r\n // 組込み制御構文の処理もここ\r\n var l = this.execute([obj]);\r\n if(l===undefined){\r\n throw new Error(\"undefined function [\" + obj[1] + \"]\");\r\n }\r\n var ret;\r\n\r\n var op = l[0]; // ID ( builtin | lambda )\r\n var vArgList = l[1]; // 仮引数\r\n var block = l[2]; // builtin:[], lambda:処理本体\r\n //l[3]; // builtin: builtin識別子 , lambda: scope\r\n\r\n // 先に引数を評価する\r\n var tmpArgList = [];\r\n for(var i = 0; i < argList.length; i ++){\r\n tmpArgList[i] = this.execute([argList[i]]);\r\n }\r\n\r\n // 現在のscopeを保存する\r\n var prevScope = this.scope;\r\n // これから使うscopeを用意する\r\n var nextScope = new Scope();\r\n\r\n // ユーザ定義関数は宣言されたスコープで実行する\r\n if(op === 'lambda'){\r\n nextScope.next = l[3]; // lambdaが持っているスコープをいまのscopeの一つ上に入れる\r\n this.scope = nextScope; // 先ほど作ったscopeを現在のscopeとする(このscopeは無駄な気がする)\r\n }\r\n\r\n this.createScope(); // 新しいscopeを作り今のscopeを一つ上に入れる\r\n\r\n // argList : 実引数\r\n // vArgList: 仮引数\r\n // memo: 可変引数を許可\r\n //if(argList.length != vArgList.length){\r\n // throw \"arg number mismatch\";\r\n //}\r\n // このときは上のスコープまで上がらない(そのスコープに無いときは作る)\r\n for(let i = 0; i < vArgList.length; i ++){\r\n if(i < argList.length){\r\n this.bindVariable(vArgList[i][1], tmpArgList[i]);\r\n }else{\r\n this.bindVariable(vArgList[i][1], null); // 引数が足りていないとき\r\n }\r\n }\r\n if(op === 'builtin'){ // builtin or lambda\r\n var type = l[3];\r\n // ビルトイン関数 (あまり増やしたくない、 なるべくpreludeにいれよう)\r\n if(type === 'if'){\r\n if(this.getVariable('cond')){ // todo: condって名前考えよう(?)\r\n let tmpScope = this.scope;\r\n this.scope = this.scope.next; // 一つ上のscopeを現在のscopeとする(ifはscopeを持たないが、仕組み上作ってしまっているため + condだけが存在する)\r\n ret = this.execute(extArgs); // if blockを評価する\r\n this.scope = tmpScope;\r\n }\r\n }else if(type === 'blockif'){\r\n if(this.getVariable('cond')){ // todo: condって名前考えよう(?)\r\n // condがみえなくする\r\n let tmpScope = this.scope\r\n this.scope = this.scope.next; // 一つ上のscopeを現在のscopeとする(ifはscopeを持たないが、仕組み上作ってしまっているため + condだけが存在する)\r\n ret = this.execute(extArgs); // if blockを評価する TODO: なんかおかしい[extargs[0]]の間違いでは?\r\n this.scope = tmpScope;\r\n }else{\r\n // condがみえなくする\r\n var tmpScope = this.scope\r\n this.scope = this.scope.next;\r\n ret = this.execute([extArgs[1]]);\r\n this.scope = tmpScope;\r\n }\r\n }else if(type === 'not'){\r\n var target = this.getVariable('target'); // targetって名前を考えよう\r\n ret = (!target)?true:false;\r\n }else if(type === 'loop'){\r\n var max = this.getVariable('max');\r\n for(let i = 0; i < max; i ++){\r\n // maxがみえなくする\r\n let tmpScope = this.scope\r\n this.scope = this.scope.next; // 一つ上のscopeを現在のscopeとする(loopはscopeを持たないが、仕組み上作ってしまっているため + maxだけが存在する)\r\n ret = this.execute(extArgs); // loopのbodyを評価する\r\n this.scope = tmpScope;\r\n }\r\n }else if(type === 'block'){\r\n // letみたいな感じで変数を宣言\r\n for(let i = 0; i < argList.length; i ++){\r\n this.bindVariable(this.execute([argList[i]]), 0); //初期値は0\r\n }\r\n ret = this.execute(extArgs); // blockの本体を評価する\r\n }else if(type === 'addDescription'){\r\n let type = this.getVariable('type');\r\n let text = this.getVariable('text');\r\n\r\n function escapeHTML(val) {\r\n return val.replace(/<>/g);\r\n };\r\n switch(type){\r\n case 'h1':\r\n this.description += '' + escapeHTML(text) + ' ';\r\n break;\r\n case 'h2':\r\n this.description += '' + escapeHTML(text) + ' ';\r\n break;\r\n case 'h3':\r\n this.description += '' + escapeHTML(text) + ' ';\r\n break;\r\n\r\n default:\r\n this.description += escapeHTML(text) + ' ';\r\n }\r\n }else if(type === 'getExternalVar'){ // MCEの外からの変数を取得する\r\n var label = this.getVariable('label');\r\n var initial = this.getVariable('initial');\r\n\r\n this.externalVarRequest[label] = {label:label, initial:initial};\r\n\r\n ret = this.externalVar[label];\r\n }else if(type === 'write'){ // 内部表現を出力する\r\n var str = this.getVariable('str'); // strって名前を考えよう\r\n this.out += str + '\\n';\r\n }else if(type === 'eval'){ // JavaScriptの関数を実行する\r\n var vClass = this.getVariable('class');\r\n var vMethod = this.getVariable('method');\r\n // 可変長引数が扱いたい\r\n // argListを直に触ればok\r\n if(vClass === 'Math'){ // 今のところMathのみをサポート。これなら安全と判断。\r\n var tmp = argList.slice(2);\r\n // todo: この処理を何とかしたい\r\n for(let i = 0; i < tmp.length; i ++){\r\n tmp[i] = this.execute([tmp[i]]);\r\n }\r\n //throw (argList);\r\n ret = Math[vMethod].apply(Math, tmp);\r\n }else{\r\n throw new Error(\"not support class :\" + vClass);\r\n }\r\n\r\n }else if(type === 'evalAllExtArgs'){ // lambda実行時にくっついているblock(extArgs)をすべて評価する\r\n // targetのscopeを合わせる\r\n // 最後に評価したlambdaを取り出す\r\n let target = this.extArgs.pop(); // TODO: popしているのが解せない・・\r\n // extArgsを処理するときは 上の関数のextArgsが見えるように一度popする (不要かも)\r\n\r\n // scopeを待避させる\r\n let tmpScope = this.scope;\r\n // extArgsのscopeを現在のscopeとする\r\n this.scope = target.scope;\r\n\r\n // extArgsのbodyを評価する\r\n ret = this.execute( target.body );\r\n // scopeを元に戻す\r\n this.scope = tmpScope;\r\n this.extArgs.push(target);\r\n\r\n }else if(type === 'evalExtArg'){\r\n var n = this.getVariable('n');\r\n\r\n let target = this.extArgs.pop();\r\n // extArgsを処理するときは 上の関数のextArgsが見えるように一度popする (不要かも)\r\n\r\n // scopeを待避させる\r\n let tmpScope = this.scope;\r\n // extArgsのscopeを現在のscopeとする\r\n this.scope = target.scope;\r\n\r\n ret = this.execute( [target.body[n]] );\r\n // scopeを元に戻す\r\n this.scope = tmpScope;\r\n\r\n this.extArgs.push(target);\r\n\r\n }else if(type === 'extArgsLength'){\r\n let target = this.extArgs.pop();\r\n // extArgsを処理するときは 上の関数のextArgsが見えるように一度popする\r\n ret = target.body.length;\r\n this.extArgs.push(target);\r\n }else if(type === 'js'){\r\n var f = l[4];\r\n ret = f();\r\n }else{\r\n throw new Error(\"unknwon builtin :\" + type);\r\n }\r\n }else{ // lambda\r\n // ユーザ定義関数の実行\r\n // lambdaがcallされたときそれにぶら下がっているblock(extArgs)はデフォルトでは評価されない\r\n // 評価するときのためにここでスタックに入れておく\r\n this.extArgs.push({body:extArgs, scope:prevScope});\r\n ret = this.execute(block); // 再起するとここがかさみそう\r\n // lambdaの実行が終わるとextArgsは不要\r\n this.extArgs.pop();\r\n }\r\n\r\n this.destroyScope();\r\n this.scope = prevScope; // 折角destroyScopeしているのにここでprevScopeに戻してしまうのはちょっとおかしい\r\n\r\n return ret;\r\n },\r\n imm:function(n){\r\n return n;\r\n },\r\n variable:function(id){\r\n return this.getVariable(id);\r\n },\r\n assign:function(left, right){\r\n return this.setVariable(this.execute([left]), this.execute([right]));\r\n },\r\n neq: function(left, right){return this.execute([left]) !== this.execute([right]);},\r\n eq: function(left, right){return this.execute([left]) === this.execute([right]);},\r\n lt: function(left, right){return this.execute([left]) > this.execute([right]);},\r\n gt: function(left, right){return this.execute([left]) < this.execute([right]);},\r\n add: function(left, right){return this.execute([left]) + this.execute([right]);},\r\n sub: function(left, right){return this.execute([left]) - this.execute([right]);},\r\n mul: function(left, right){return this.execute([left]) * this.execute([right]);},\r\n div: function(left, right){return this.execute([left]) / this.execute([right]);},\r\n mod: function(left, right){return this.execute([left]) % this.execute([right]);}\r\n};\r\n/*\r\nfunction dump(ar,depth){\r\n var dumpStr = \"\";\r\n if(depth === 0 )dumpStr = \"\";\r\n var i = 0;\r\n for(i = 0; i < ar.length; i++){\r\n if(ar[i] instanceof Array){\r\n dumpStr += '[';\r\n dump(ar[i], depth + 1);\r\n dumpStr += ']';\r\n }else{\r\n dumpStr += ar[i];\r\n }\r\n if(i != ar.length - 1){\r\n dumpStr += ',';\r\n }\r\n }\r\n return dumpStr;\r\n}\r\n*/\r\n\r\nmodule.exports = {\r\n MCL: MCL,\r\n MCE: MCE,\r\n Affine: Affine,\r\n}\r\n\r\n/*\r\nvar mcl = new MCL();\r\nvar o = mcl.parse(\"2*3 + 5*2;\");\r\nconsole.log(o);\r\nconsole.log(mcl.calcAction);\r\ndump(mcl.calcAction.block,0);\r\nconsole.log(dumpStr);\r\n\r\nvar mce = new MCE();\r\nvar ret = mce.execute(mcl.calcAction.block);\r\nconsole.log(ret);\r\n*/\r\n","/*\r\n * Gin - a recursive descent parser generator\r\n *\r\n * Copyright (c) 1998-2003 Joel de Guzman\r\n * Copyright (c) 2001 Daniel Nuffer\r\n * Copyright (c) 2002 Hartmut Kaiser\r\n * Copyright (c) 2003 Martin Wille\r\n * http://spirit.sourceforge.net/\r\n * Copyright (c) 2007 nanto_vi (TOYAMA Nao) \r\n *\r\n * Use, modification and distribution is subject to the Boost Software\r\n * License, Version 1.0 or the\r\n * MIT License .\r\n *\r\n */\r\n/*eslint-disable */\r\n\r\nif (!Gin)\r\n var Gin = {};\r\n\r\nGin.VERSION = \"0.90\";\r\nGin.BUILD = 20070912;\r\n\r\n\r\n// ==== Utils ====\r\n\r\nGin.Utils = {\r\n inherit: function (Sub, Super, members) {\r\n function Traits() {}\r\n Traits.prototype = Super.prototype;\r\n Sub.prototype = new Traits();\r\n Sub.prototype.constructor = Sub;\r\n Sub.prototype._super = function () {\r\n var original = this._super;\r\n this._super = Super.prototype._super || null;\r\n Super.apply(this, arguments);\r\n if (this.constructor == Sub)\r\n delete this._super;\r\n else\r\n this._super = original;\r\n };\r\n Gin.Utils.extend(Sub.prototype, members);\r\n },\r\n extend: function (destination, source) {\r\n for (var i in source)\r\n destination[i] = source[i];\r\n return destination;\r\n },\r\n makeTuple: function () {\r\n var tuple = [];\r\n tuple.isTuple = true;\r\n for (var i = 0; i < arguments.length; i++) {\r\n var value = arguments[i];\r\n if (value instanceof Array && value.isTuple && !value.ruleName)\r\n tuple.push.apply(tuple, value);\r\n else\r\n tuple.push(value);\r\n }\r\n return tuple;\r\n },\r\n quote: function (string) {\r\n return '\"' + Gin.Utils.escape(string) + '\"';\r\n },\r\n unquote: function (string) {\r\n return Gin.Utils.unescape(String(string).slice(1, -1));\r\n },\r\n escape: (function () {\r\n var map = { \"\\0\": \"x00\", \"\\b\": \"b\", \"\\f\": \"f\", \"\\n\": \"n\", \"\\r\": \"r\",\r\n \"\\t\": \"t\", \"\\v\": \"v\", \"\\\"\": \"\\\"\", \"\\\\\": \"\\\\\" };\r\n function fn(c) { return \"\\\\\" + map[c]; }\r\n return function (string) {\r\n return String(string).replace(/[\\0\\b\\f\\n\\r\\t\\v\"\\\\]/g, fn);\r\n };\r\n })(),\r\n unescape: (function () {\r\n var map = { b: \"\\b\", f: \"\\f\", n: \"\\n\", r: \"\\r\", t: \"\\t\", v: \"\\v\" };\r\n function fn(match, any, control, code, octal) {\r\n return control ? map[control] :\r\n code ? String.fromCharCode(\"0x\" + code.substring(1)) :\r\n octal ? String.fromCharCode(parseInt(octal, 8)) : any;\r\n }\r\n return function (string) {\r\n return String(string).replace(\r\n /\\\\(([bfnrtv])|(u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2})|([0-7]{1,3})|.)/g, fn\r\n );\r\n };\r\n })()\r\n};\r\n\r\n\r\n// ==== Parser ====\r\n\r\nGin.Parser = function () {\r\n throw new Gin.Error(Gin.Error.NOT_IMPLEMENTED);\r\n};\r\nGin.Parser.prototype.parse =\r\nfunction (scanner, handler) {\r\n throw new Gin.Error(Gin.Error.NOT_IMPLEMENTED);\r\n};\r\n\r\nGin.Parser.String = function (string) {\r\n this._value = String(string);\r\n this._length = this._value.length;\r\n};\r\nGin.Utils.inherit(Gin.Parser.String, Gin.Parser);\r\nGin.Parser.String.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n if (scanner.substring(0, this._length) != this._value) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n scanner.moveIndex(this._length);\r\n return new Gin.Match(this._value, scanner);\r\n};\r\n\r\nGin.Parser.RegExp = function (pattern, flags) {\r\n if (pattern instanceof RegExp) {\r\n this._global = pattern.global;\r\n this._value = pattern;\r\n flags = (pattern.ignoreCase ? \"i\" : \"\") + (pattern.multiline ? \"m\" : \"\");\r\n pattern = pattern.source;\r\n } else {\r\n flags = String(flags || \"\");\r\n this._global = (flags.indexOf(\"g\") != -1);\r\n this._value = new RegExp(pattern, flags);\r\n flags = flags.replace(\"g\", \"\");\r\n }\r\n this._re = new RegExp(\"^(?:\" + pattern + \")\", flags);\r\n};\r\nGin.Utils.inherit(Gin.Parser.RegExp, Gin.Parser);\r\nGin.Parser.RegExp.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n var match = scanner.match(this._re);\r\n if (!match) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n var value = new String(match[0]);\r\n value.match = match;\r\n scanner.moveIndex(value.length);\r\n return new Gin.Match(value, scanner);\r\n};\r\n\r\nGin.Parser.Ref = function (base, name) {\r\n this._base = base;\r\n this._name = name;\r\n};\r\nGin.Utils.inherit(Gin.Parser.Ref, Gin.Parser);\r\nGin.Parser.Ref.prototype.parse =\r\nfunction (scanner, handler) {\r\n return this._base[this._name].parse(scanner, handler);\r\n};\r\n\r\nGin.Parser.Nothing = function () {};\r\nGin.Utils.inherit(Gin.Parser.Nothing, Gin.Parser);\r\nGin.Parser.Nothing.prototype.parse =\r\nfunction (scanner, handler) {\r\n return null;\r\n};\r\n\r\nGin.Parser.End = function () {};\r\nGin.Utils.inherit(Gin.Parser.End, Gin.Parser);\r\nGin.Parser.End.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n return scanner.atEnd() ? new Gin.Match(\"\", scanner) : null;\r\n};\r\n\r\nGin.Parser.Unary = function (parser) {\r\n this._subject = parser;\r\n};\r\nGin.Utils.inherit(Gin.Parser.Unary, Gin.Parser);\r\n\r\nGin.Parser.Action = function (parser, action) {\r\n this._super(parser);\r\n this._action = action;\r\n this._isRef = (typeof action != \"function\");\r\n};\r\nGin.Utils.inherit(Gin.Parser.Action, Gin.Parser.Unary);\r\nGin.Parser.Action.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n var match = this._subject.parse(scanner, handler);\r\n if (!match) return null;\r\n var action = this._isRef ? handler[this._action] : this._action;\r\n var thisObject = this._isRef ? handler : null;\r\n var value;\r\n try {\r\n value = action.call(thisObject, match.value);\r\n } catch (ex) {\r\n if ((ex instanceof Gin.Error && ex.message == Gin.Error.NO_MATCH) ||\r\n ex == Gin.Error.NO_MATCH) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n throw ex;\r\n }\r\n return (value === undefined) ? match : new Gin.Match(value, scanner);\r\n};\r\n\r\nGin.Parser.Repeat = function (parser, min, max) {\r\n this._super(parser);\r\n this._min = min;\r\n this._max = max;\r\n};\r\nGin.Utils.inherit(Gin.Parser.Repeat, Gin.Parser.Unary);\r\nGin.Parser.Repeat.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n var value = Gin.Utils.makeTuple();\r\n var count = 0;\r\n for (var match;\r\n count < this._max && (match = this._subject.parse(scanner, handler));\r\n count++)\r\n value = Gin.Utils.makeTuple(value, match.value);\r\n if (count < this._min) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n return new Gin.Match(value, scanner);\r\n};\r\n\r\nGin.Parser.Binary = function (parser1, parser2) {\r\n this._left = parser1;\r\n this._right = parser2;\r\n};\r\nGin.Utils.inherit(Gin.Parser.Binary, Gin.Parser);\r\n\r\nGin.Parser.Seq = function (parser1, parser2) {\r\n this._super(parser1, parser2);\r\n};\r\nGin.Utils.inherit(Gin.Parser.Seq, Gin.Parser.Binary);\r\nGin.Parser.Seq.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n var match1 = this._left.parse(scanner, handler);\r\n if (!match1) return null;\r\n var match2 = this._right.parse(scanner, handler);\r\n if (!match2) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n var value = Gin.Utils.makeTuple(match1.value, match2.value);\r\n return new Gin.Match(value, scanner);\r\n};\r\n\r\nGin.Parser.Diff = function (parser1, parser2) {\r\n this._super(parser1, parser2);\r\n};\r\nGin.Utils.inherit(Gin.Parser.Diff, Gin.Parser.Binary);\r\nGin.Parser.Diff.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var start = scanner.getIndex();\r\n var match1 = this._left.parse(scanner, handler);\r\n if (!match1) return null;\r\n scanner.setIndex(start);\r\n var match2 = this._right.parse(scanner, handler);\r\n if (match2 && match1.lastIndex <= match2.lastIndex) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n scanner.setIndex(match1.lastIndex);\r\n return match1;\r\n};\r\n\r\nGin.Parser.Alt = function (parser1, parser2) {\r\n this._super(parser1, parser2);\r\n};\r\nGin.Utils.inherit(Gin.Parser.Alt, Gin.Parser.Binary);\r\nGin.Parser.Alt.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n return this._left.parse(scanner, handler) ||\r\n this._right.parse(scanner, handler);\r\n};\r\n\r\n\r\n// ==== Rule ====\r\n\r\nGin.Rule = function (rule, action, rules, name) {\r\n this._parser =\r\n (rule instanceof Gin.Parser) ? rule :\r\n (rule instanceof RegExp) ? Gin.Rule.Parser.parse(rule, rules) :\r\n new Gin.Parser.String(rule);\r\n this._name = name || \"\";\r\n var parser = this;\r\n if (this._parser instanceof Gin.Rule.Action) {\r\n var ruleAction = this._parser.action;\r\n parser._parser = this._parser.parser;\r\n parser = new Gin.Parser.Action(parser, ruleAction);\r\n }\r\n if (action)\r\n parser = new Gin.Parser.Action(parser, action);\r\n return parser;\r\n};\r\nGin.Utils.inherit(Gin.Rule, Gin.Parser);\r\nGin.Rule.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner);\r\n var match = this._parser.parse(scanner, handler);\r\n if (!match) return null;\r\n var value = Gin.Utils.makeTuple(match.value);\r\n value.ruleName = this._name;\r\n return new Gin.Match(value, scanner);\r\n};\r\n\r\nGin.Rule.Action = function (parser, action) {\r\n this.parser = parser;\r\n this.action = action;\r\n};\r\n\r\nGin.Rule.Parser = {\r\n parse: function (input, rules) {\r\n if (input instanceof RegExp)\r\n input = input.source;\r\n var tokens = new Gin.Rule.Tokenizer(input);\r\n return this.parseRuleAction(tokens, rules);\r\n },\r\n parseRuleAction: function (tokens, rules) {\r\n var parser = this.parseAlt(tokens, rules);\r\n var token = tokens.get();\r\n if (!token) return parser;\r\n if (token != \"::\" || !(token = tokens.get()) ||\r\n token.type != \"ident\" || tokens.peek())\r\n throw new Gin.Error(Gin.Error.INVALID_RULE);\r\n return new Gin.Rule.Action(parser, token);\r\n },\r\n parseAlt: function (tokens, rules) {\r\n var parser = this.parseDiff(tokens, rules);\r\n while (tokens.peek() == \"|\") {\r\n tokens.get();\r\n parser = new Gin.Parser.Alt(parser, this.parseDiff(tokens, rules));\r\n }\r\n return parser;\r\n },\r\n parseDiff: function (tokens, rules) {\r\n var parser = this.parseSeq(tokens, rules);\r\n if (tokens.peek() == \"-\") {\r\n tokens.get();\r\n parser = new Gin.Parser.Diff(parser, this.parseSeq(tokens, rules));\r\n }\r\n return parser;\r\n },\r\n parseSeq: function (tokens, rules) {\r\n var parser = this.parseRepeat(tokens, rules);\r\n var token\r\n while ((token = tokens.peek()) &&\r\n (token.type == \"ident\" || token.type == \"string\" ||\r\n token.type == \"regexp\" || token.type == \"predef\" || token == \"(\"))\r\n parser = new Gin.Parser.Seq(parser, this.parseRepeat(tokens, rules));\r\n return parser;\r\n },\r\n parseRepeat: function (tokens, rules) {\r\n var parser = this.parseAction(tokens, rules);\r\n var token = tokens.peek();\r\n if (token && token.type == \"repeat\") {\r\n tokens.get();\r\n var min, max;\r\n if (token == \"*\" || token == \"+\" || token == \"?\") {\r\n min = (token == \"+\") ? 1 : 0;\r\n max = (token == \"?\") ? 1 : Infinity;\r\n } else {\r\n var match = token.match(/(\\d+)(,(\\d*))?/);\r\n min = +match[1];\r\n max = match[3] ? +match[3] : match[2] ? Infinity : min;\r\n }\r\n parser = new Gin.Parser.Repeat(parser, min, max);\r\n }\r\n return parser;\r\n },\r\n parseAction: function (tokens, rules) {\r\n var parser = this.parsePrimary(tokens, rules);\r\n while (tokens.peek() == \":\") {\r\n tokens.get();\r\n var token = tokens.get();\r\n if (!token || token.type != \"ident\")\r\n throw new Gin.Error(Gin.Error.INVALID_RULE);\r\n parser = new Gin.Parser.Action(parser, token);\r\n }\r\n return parser;\r\n },\r\n parsePrimary: function (tokens, rules) {\r\n var token = tokens.get();\r\n switch (token.type) {\r\n case \"ident\":\r\n if (!rules || !(token in rules))\r\n throw new Gin.Error(Gin.Error.UNDEFINED_SYMBOL);\r\n return new Gin.Parser.Ref(rules, token);\r\n case \"string\":\r\n var string = Gin.Utils.unquote(token)\r\n return new Gin.Parser.String(string);\r\n case \"regexp\":\r\n var delimiterIndex = token.lastIndexOf(\">\");\r\n var pattern = token.substring(1, delimiterIndex);\r\n var flags = token.substring(delimiterIndex + 1);\r\n return new Gin.Parser.RegExp(pattern, flags);\r\n case \"predef\":\r\n var symbol = token.substring(1);\r\n if (!(symbol in Gin))\r\n throw new Gin.Error(Gin.Error.UNDEFINED_SYMBOL);\r\n return new Gin.Parser.Ref(Gin, symbol);\r\n case \"(\":\r\n var parser = this.parseAlt(tokens, rules);\r\n if (tokens.get() != \")\") break;\r\n return parser;\r\n }\r\n //while ((token = tokens.get())) print(token);\r\n throw new Gin.Error(Gin.Error.INVALID_RULE);\r\n }\r\n};\r\n\r\nGin.Rule.Tokenizer = function (input) {\r\n this._input = String(input);\r\n this._next = null;\r\n}\r\nGin.Rule.Tokenizer.prototype.get =\r\nfunction () {\r\n var token = this.peek();\r\n this._next = null;\r\n return token;\r\n};\r\nGin.Rule.Tokenizer.prototype.peek =\r\nfunction () {\r\n if (this._next) return this._next;\r\n this._input = this._input.replace(/^[ ]+/, \"\");\r\n if (!this._input) return null;\r\n var match = this._input.match(this._re);\r\n if (!match) throw new Gin.Error(Gin.Error.INVALID_TOKEN);\r\n this._input = this._input.substring(match[0].length);\r\n var token = new String(match[0]);\r\n token.type = match[1] ? \"ident\" :\r\n match[2] ? \"repeat\" :\r\n match[3] ? \"string\" :\r\n match[4] ? \"regexp\" :\r\n match[5] ? \"predef\" : match[0];\r\n this._next = token;\r\n return token;\r\n};\r\nGin.Rule.Tokenizer.prototype._re =\r\n /^(?:(\\w+)|[()|-]|::?|([*+?]|\\{\\d+(?:,\\d*)?\\})|(\\[(?:[^\\\\\\]]|\\\\.)*\\]|'(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|(<(?:[^\\\\[>]|\\\\.|\\[(?:[^\\\\\\]]|\\\\.)*\\])*>\\w*)|(\\$\\w+))/;\r\n\r\n\r\n// ==== Grammar ====\r\n\r\nGin.Grammar = function (rules, start, skip) {\r\n if (!(start in rules))\r\n throw new Gin.Error(Gin.Error.UNDEFINED_SYMBOL);\r\n rules = Gin.Utils.extend({}, rules);\r\n for (var i in rules)\r\n rules[i] = new Gin.Rule(rules[i], null, rules, i);\r\n this.rules = rules;\r\n this._start = start;\r\n this._skip = skip;\r\n};\r\nGin.Utils.inherit(Gin.Grammar, Gin.Parser);\r\nGin.Grammar.prototype.parse =\r\nfunction (scanner, handler) {\r\n scanner = Gin.Scanner(scanner, this._skip);\r\n var start = scanner.getIndex();\r\n var match = this.rules[this._start].parse([scanner, this._skip], handler);\r\n if (!match) {\r\n scanner.setIndex(start);\r\n return null;\r\n }\r\n scanner.moveIndex(match.lastIndex);\r\n return new Gin.Match(match.value, scanner);\r\n};\r\n\r\n\r\n// ==== Match ====\r\n\r\nGin.Match = function (value, scanner) {\r\n this.value = value;\r\n this.full = scanner.atEnd();\r\n this.lastIndex = scanner.getIndex();\r\n};\r\n\r\n\r\n// ==== Scanner ====\r\n\r\nGin.Scanner = function (input, skip) {\r\n var Scanner = arguments.callee;\r\n if (!(this instanceof Scanner))\r\n return (input instanceof Scanner) ? input : new Scanner(input, skip);\r\n if (input instanceof Scanner) {\r\n skip = skip || input._skip;\r\n } else if (input instanceof Array) {\r\n skip = input[1];\r\n input = input[0];\r\n }\r\n this._input = String(input);\r\n this._index = 0;\r\n this._skip =\r\n (skip instanceof Gin.Parser) ? skip :\r\n (skip instanceof RegExp) ? new Gin.Parser.RegExp(skip) :\r\n skip ? new Gin.Parser.String(skip) : Gin.SPACE;\r\n return this;\r\n};\r\nGin.Utils.inherit(Gin.Scanner, String);\r\nGin.Scanner.prototype.getIndex =\r\nfunction () {\r\n return this._index;\r\n};\r\nGin.Scanner.prototype.setIndex =\r\nfunction (index) {\r\n this._index = index;\r\n};\r\nGin.Scanner.prototype.moveIndex =\r\nfunction (offset) {\r\n this._index += offset;\r\n};\r\nGin.Scanner.prototype.skip =\r\nfunction () {\r\n if (this._skip == Gin.NOTHING) return;\r\n var input = this._input.substring(this._index);\r\n var scanner = new Gin.Scanner(input, Gin.NOTHING);\r\n while (this._skip.parse(scanner))\r\n ;\r\n this.moveIndex(scanner.getIndex());\r\n};\r\nGin.Scanner.prototype.atEnd =\r\nfunction () {\r\n this.skip();\r\n return this._index >= this._input.length;\r\n};\r\nGin.Scanner.prototype.toString =\r\nfunction () {\r\n this.skip();\r\n return this._input.substring(this._index);\r\n};\r\nGin.Scanner.prototype.valueOf = Object.prototype.valueOf;\r\n\r\n\r\n// ==== Error ====\r\n\r\nGin.Error = function (message) {\r\n this.message = String(message || \"\");\r\n};\r\nGin.Utils.inherit(Gin.Error, Error);\r\nGin.Error.prototype.name = \"GinError\";\r\n\r\nGin.Error.NOT_IMPLEMENTED = \"not implemented\";\r\nGin.Error.INVALID_TOKEN = \"invalid token\";\r\nGin.Error.INVALID_RULE = \"invalid rule\";\r\nGin.Error.UNDEFINED_SYMBOL = \"undefined symbol\";\r\nGin.Error.NO_MATCH = \"no match\";\r\n\r\n\r\n// ==== Predefined Parsers ====\r\n\r\nGin.ANY = new Gin.Parser.RegExp(/[\\S\\s]/);\r\nGin.SPACE = new Gin.Parser.RegExp(/[ \\t\\r\\n]/);\r\nGin.BLANK = new Gin.Parser.RegExp(/[ \\t]/);\r\nGin.EOL = new Gin.Parser.RegExp(/\\n|\\r\\n?/);\r\nGin.NL = new Gin.Parser.RegExp(/[\\n\\u2028\\u2029]|\\r\\n?/);\r\nGin.NOTHING = new Gin.Parser.Nothing();\r\nGin.END = new Gin.Parser.End();\r\nGin.EPSILON = new Gin.Parser.String(\"\");\r\nGin.EPS = Gin.EPSILON;\r\n\r\nGin.UINT = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/[1-9][0-9]*|0/), Number\r\n);\r\nGin.INT = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/[+-]?(?:[1-9][0-9]*|0)/), Number\r\n);\r\nGin.UDECIMAL = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/(?:[1-9][0-9]*|0)(?:\\.[0-9]*)?|\\.[0-9]+/), Number\r\n);\r\nGin.DECIMAL = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/[+-]?(?:(?:[1-9][0-9]*|0)(?:\\.[0-9]*)?|\\.[0-9]+)/),\r\n Number\r\n);\r\nGin.UREAL = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(\r\n /(?:(?:[1-9][0-9]*|0)(?:\\.[0-9]*)?|\\.[0-9]+)(?:[Ee][+-]?[0-9]+)?/\r\n ),\r\n Number\r\n);\r\nGin.REAL = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(\r\n /[+-]?(?:(?:[1-9][0-9]*|0)(?:\\.[0-9]*)?|\\.[0-9]+)(?:[Ee][+-]?[0-9]+)?/\r\n ),\r\n Number\r\n);\r\nGin.OCTAL = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/0[0-7]+/),\r\n function (value) { return parseInt(value, 8); }\r\n);\r\nGin.HEX = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/0[Xx][0-9A-Fa-f]+/), Number\r\n);\r\nGin.JS_NUMBER = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(\r\n /(?:0(?:([0-7]+)|[Xx][0-9A-Fa-f]+)|(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[Ee][+-]?[0-9]+)?)(?![\\w$])/\r\n ),\r\n function (value) { return value.match[1] ? parseInt(value, 8) : +value; }\r\n);\r\n\r\nGin.CSV_STRING = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/\"(?:[^\"]|\"\")*\"/),\r\n function (value) { return value.slice(1, -1).replace(/\"\"/g, '\"'); }\r\n);\r\nGin.JS_STRING = new Gin.Parser.Action(\r\n new Gin.Parser.RegExp(/\"(?:[^\\\\\"]|\\\\.)*\"|'(?:[^\\\\']|\\\\.)*'/),\r\n Gin.Utils.unquote\r\n);\r\n\r\nmodule.exports = {\r\n Gin: Gin,\r\n}\r\n","// mt.js 0.2.4 (2005-12-23)\r\n\r\n/*\r\n\r\nMersenne Twister in JavaScript based on \"mt19937ar.c\"\r\n\r\n * JavaScript version by Magicant: Copyright (C) 2005 Magicant\r\n\r\n\r\n * Original C version by Makoto Matsumoto and Takuji Nishimura\r\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html\r\n\r\nCopyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions\r\nare met:\r\n\r\n 1. Redistributions of source code must retain the above copyright\r\n notice, this list of conditions and the following disclaimer.\r\n\r\n 2. Redistributions in binary form must reproduce the above copyright\r\n notice, this list of conditions and the following disclaimer in the\r\n documentation and/or other materials provided with the distribution.\r\n\r\n 3. The names of its contributors may not be used to endorse or promote \r\n products derived from this software without specific prior written \r\n permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n*/\r\n\r\n\r\n// Methods whose name starts with \"_\" are private methods.\r\n// Don't call them externally!\r\n\r\n\r\n/**\r\n * Constructor: MersenneTwister([integer/Array seed])\r\n * initializes the object with the given seed.\r\n * The seed may be an integer or an array of integers.\r\n * If the seed is not given, the object will be initialized with the current\r\n * time: new Date().getTime().\r\n * See also: setSeed(seed).\r\n */\r\nfunction MersenneTwister(seed) {\r\n\tif (arguments.length === 0)\r\n\t\tseed = new Date().getTime();\r\n\t\r\n\tthis._mt = new Array(624);\r\n\tthis.setSeed(seed);\r\n}\r\n\r\n/** multiplies two uint32 values and returns a uint32 result. */\r\nMersenneTwister._mulUint32 = function(a, b) {\r\n\tvar a1 = a >>> 16, a2 = a & 0xffff;\r\n\tvar b1 = b >>> 16, b2 = b & 0xffff;\r\n\treturn (((a1 * b2 + a2 * b1) << 16) + a2 * b2) >>> 0;\r\n};\r\n\r\n/** returns ceil(value) if value is finite number, otherwise 0. */\r\nMersenneTwister._toNumber = function(x) {\r\n\treturn (typeof x == \"number\" && !isNaN(x)) ? Math.ceil(x) : 0;\r\n};\r\n\r\n/**\r\n * Method: setSeed(integer/Array seed)\r\n * resets the seed. The seed may be an integer or an array of integers.\r\n * Elements in the seed array that are not numbers will be treated as 0.\r\n * Numbers that are not integers will be rounded down.\r\n * The integer(s) should be greater than or equal to 0 and less than 2^32.\r\n * This method is compatible with init_genrand and init_by_array function of\r\n * the original C version.\r\n */\r\nMersenneTwister.prototype.setSeed = function(seed) {\r\n\tvar mt = this._mt;\r\n\tif (typeof seed == \"number\") {\r\n\t\tmt[0] = seed >>> 0;\r\n\t\tfor (var i = 1; i < mt.length; i++) {\r\n\t\t\tvar x = mt[i-1] ^ (mt[i-1] >>> 30);\r\n\t\t\tmt[i] = MersenneTwister._mulUint32(1812433253, x) + i;\r\n\t\t}\r\n\t\tthis._index = mt.length;\r\n\t} else if (seed instanceof Array) {\r\n\t\tlet i = 1, j = 0;\r\n\t\tthis.setSeed(19650218);\r\n\t\tfor (var k = Math.max(mt.length, seed.length); k > 0; k--) {\r\n\t\t\tlet x = mt[i-1] ^ (mt[i-1] >>> 30);\r\n\t\t\tx = MersenneTwister._mulUint32(x, 1664525);\r\n\t\t\tmt[i] = (mt[i] ^ x) + (seed[j] >>> 0) + j;\r\n\t\t\tif (++i >= mt.length) {\r\n\t\t\t\tmt[0] = mt[mt.length-1];\r\n\t\t\t\ti = 1;\r\n\t\t\t}\r\n\t\t\tif (++j >= seed.length) {\r\n\t\t\t\tj = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (let k = mt.length - 1; k > 0; k--) {\r\n\t\t\tlet x = mt[i-1] ^ (mt[i-1] >>> 30);\r\n\t\t\tx = MersenneTwister._mulUint32(x, 1566083941);\r\n\t\t\tmt[i] = (mt[i] ^ x) - i;\r\n\t\t\tif (++i >= mt.length) {\r\n\t\t\t\tmt[0] = mt[mt.length-1];\r\n\t\t\t\ti = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tmt[0] = 0x80000000;\r\n\t} else {\r\n\t\tthrow new TypeError(\"MersenneTwister: illegal seed.\");\r\n\t}\r\n};\r\n\r\n/** returns the next random Uint32 value. */\r\nMersenneTwister.prototype._nextInt = function() {\r\n\tvar mt = this._mt, value;\r\n\t\r\n\tif (this._index >= mt.length) {\r\n\t\tvar k = 0, N = mt.length, M = 397;\r\n\t\tdo {\r\n\t\t\tvalue = (mt[k] & 0x80000000) | (mt[k+1] & 0x7fffffff);\r\n\t\t\tmt[k] = mt[k+M] ^ (value >>> 1) ^ ((value & 1) ? 0x9908b0df : 0);\r\n\t\t} while (++k < N-M);\r\n\t\tdo {\r\n\t\t\tvalue = (mt[k] & 0x80000000) | (mt[k+1] & 0x7fffffff);\r\n\t\t\tmt[k] = mt[k+M-N] ^ (value >>> 1) ^ ((value & 1) ? 0x9908b0df : 0);\r\n\t\t} while (++k < N-1);\r\n\t\tvalue = (mt[N-1] & 0x80000000) | (mt[0] & 0x7fffffff);\r\n\t\tmt[N-1] = mt[M-1] ^ (value >>> 1) ^ ((value & 1) ? 0x9908b0df : 0);\r\n\t\tthis._index = 0;\r\n\t}\r\n\t\r\n\tvalue = mt[this._index++];\r\n\tvalue ^= value >>> 11;\r\n\tvalue ^= (value << 7) & 0x9d2c5680;\r\n\tvalue ^= (value << 15) & 0xefc60000;\r\n\tvalue ^= value >>> 18;\r\n\treturn value >>> 0;\r\n};\r\n\r\n/**\r\n * Method: nextInt([[number min,] number max])\r\n * returns a random integer that is greater than or equal to min and less than\r\n * max. The value of (max - min) must be positive number less or equal to 2^32.\r\n * If min is not given or not a number, this method uses 0 for min.\r\n * If neither of min and max is given or max is out of range, this method\r\n * uses 2^32 for max.\r\n * This method is compatible with genrand_int32 function of the original C\r\n * version for min=0 & max=2^32, but not with genrand_int31 function.\r\n */\r\nMersenneTwister.prototype.nextInt = function() {\r\n\tvar min, sup;\r\n\tswitch (arguments.length) {\r\n\tcase 0:\r\n\t\treturn this._nextInt();\r\n\tcase 1:\r\n\t\tmin = 0;\r\n\t\tsup = MersenneTwister._toNumber(arguments[0]);\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tmin = MersenneTwister._toNumber(arguments[0]);\r\n\t\tsup = MersenneTwister._toNumber(arguments[1]) - min;\r\n\t\tbreak;\r\n\t}\r\n\t\r\n\tif (!(0 < sup && sup < 0x100000000))\r\n\t\treturn this._nextInt() + min;\r\n\tif ((sup & (~sup + 1)) === sup)\r\n\t\treturn ((sup - 1) & this._nextInt()) + min;\r\n\t\r\n\tvar value;\r\n\tdo {\r\n\t\tvalue = this._nextInt();\r\n\t} while (sup > 4294967296 - (value - (value %= sup)));\r\n\treturn value + min;\r\n};\r\n\r\n/**\r\n * Method: next()\r\n * returns a random number that is greater than or equal to 0 and less than 1.\r\n * This method is compatible with genrand_res53 function of the original C\r\n * version.\r\n */\r\nMersenneTwister.prototype.next = function() {\r\n\tvar a = this._nextInt() >>> 5, b = this._nextInt() >>> 6;\r\n\treturn (a * 0x4000000 + b) / 0x20000000000000; \r\n};\r\n\r\nmodule.exports = {\r\n MersenneTwister: MersenneTwister,\r\n}\r\n","// render-svg.js\r\nvar rb = require(\"./render-base.js\")\r\n\r\n// レンダラ\r\n// SVGを簡単に使うために利用\r\nvar RendererSVG = function(fonts){\r\n this.size = 800; // TODO: default\r\n this.fonts = fonts;\r\n this.patternCanv = []; // パターン塗りつぶし用キャンバス\r\n this.ctxTmp = null; // 待避用ctx\r\n this.ctxId = 0;\r\n this.imgCache = {}; // 画像のキャッシュ\r\n this.svgData = []\r\n this.lineWidth = 1/200;\r\n this.fillStyle = \"transparent\";\r\n this.strokeStyle = \"black\";\r\n this.fontName = \"\";\r\n this.lastPoint = [0,0];\r\n this.clipPathId = null;\r\n};\r\nRendererSVG.prototype = {\r\n afX:function(x,y){return this.affine.calc(parseFloat(x), parseFloat(y))[0];},\r\n afY:function(x,y){return this.affine.calc(parseFloat(x), parseFloat(y))[1];},\r\n dist:function(x,y){return Math.sqrt(x*x + y*y)},\r\n theta:function(theta){return Math.PI * theta},\r\n skew:function(theta,theta2){\r\n theta = this.theta(parseFloat(theta));\r\n theta2 = this.theta(parseFloat(theta2));\r\n this.affine.mul(new rb.Affine(1,Math.tan(theta),0, Math.tan(theta2),1,0, 0,0,1));\r\n },\r\n scale:function(x,y){\r\n this.affine.mul(new rb.Affine(parseFloat(x),0,0, 0,parseFloat(y),0, 0,0,1));\r\n },\r\n shift:function(x,y){\r\n this.affine.mul(new rb.Affine(1,0,parseFloat(x), 0,1,parseFloat(y), 0,0,1)); // shift\r\n },\r\n rotate:function(theta){\r\n theta = this.theta(parseFloat(theta));\r\n this.affine.mul(new rb.Affine(Math.cos(theta),-Math.sin(theta),0,\r\n Math.sin(theta), Math.cos(theta),0,\r\n 0,0,1)); // rotate\r\n },\r\n\r\n save:function(){\r\n //this.ctx.save();\r\n this.stack.push(\r\n {\r\n affine: this.affine.clone(),\r\n lineWidth: this.lineWidth,\r\n fillStyle: this.fillStyle,\r\n strokeStyle: this.strokeStyle,\r\n fontName: this.fontName,\r\n });\r\n },\r\n restore:function(){\r\n let state = this.stack.pop();\r\n this.affine = state.affine;\r\n this.lineWidth = state.lineWidth;\r\n this.fillStyle = state.fillStyle;\r\n this.strokeStyle = state.strokeStyle;\r\n this.fontName = state.fontName;\r\n //this.ctx.restore();\r\n },\r\n beginPath:function(){\r\n //this.ctx.beginPath();\r\n this.pathData = []\r\n },\r\n lineTo:function(x,y){\r\n //this.ctx.lineTo(this.afX(x,y), this.afY(x,y));\r\n let mode = \"L\";\r\n if(this.pathData.length === 0){\r\n mode = \"M\"\r\n }\r\n this.pathData = this.pathData.concat([mode, this.afX(x, y), this.afY(x, y)])\r\n this.lastPoint = [this.afX(x, y), this.afY(x, y)];\r\n },\r\n path: function(){\r\n this.pathData = this.pathData.concat(Array.prototype.slice.apply(arguments))\r\n },\r\n quadTo:function(x,y,x2,y2){\r\n //this.ctx.quadraticCurveTo(this.afX(x,y), this.afY(x,y), this.afX(x2,y2), this.afY(x2,y2));\r\n this.pathData = this.pathData.concat([\"Q\", this.afX(x, y), this.afY(x, y), this.afX(x2, y2), this.afY(x2, y2)])\r\n this.lastPoint = [this.afX(x2, y2), this.afY(x2, y2)];\r\n },\r\n arcTo:function(x,y,x2,y2,r){\r\n var tx = this.affine.data[0][0];\r\n var ty = this.affine.data[1][1];\r\n var d = r * Math.sqrt(tx*tx + ty*ty);\r\n //this.ctx.arcTo(this.afX(x,y), this.afY(x,y), this.afX(x2,y2), this.afY(x2,y2), d);\r\n // this.lastPoint\r\n var p0 = this.lastPoint;\r\n var p1 = [this.afX(x, y), this.afY(x, y)];\r\n var p2 = [this.afX(x2,y2), this.afY(x2, y2)];\r\n var d01 = Math.sqrt((p1[0] - p0[0])*(p1[0] - p0[0]) + (p1[1] - p0[1])*(p1[1] - p0[1]));\r\n var d12 = Math.sqrt((p1[0] - p2[0])*(p1[0] - p2[0]) + (p1[1] - p2[1])*(p1[1] - p2[1]));\r\n var p1a = [\r\n p0[0] + (p1[0] - p0[0]) * ((d01 - d) / d01),\r\n p0[1] + (p1[1] - p0[1]) * ((d01 - d) / d01),\r\n ];\r\n var p2a = [\r\n p2[0] + (p1[0] - p2[0]) * ((d12 - d) / d12),\r\n p2[1] + (p1[1] - p2[1]) * ((d12 - d) / d12),\r\n ];\r\n\r\n /*\r\n for SVG arc\r\n Move To p0\r\n LineTo p1a\r\n ArcTo p2a (p1は通らない)\r\n LineTo p2\r\n */\r\n /*\r\n this.svgData.push(' ')\r\n this.svgData.push(' ')\r\n this.svgData.push(' ')\r\n this.svgData.push(' ')\r\n */\r\n this.pathData = this.pathData.concat([\"L\", p1a[0], p1a[1], \"A\", d, d, 0, 0, 1, p2a[0], p2a[1], \"L\", p2[0], p2[1]])\r\n\r\n // simple line\r\n //this.pathData = this.pathData.concat([\"L\", this.afX(x, y), this.afY(x, y), \"L\", this.afX(x2, y2), this.afY(x2, y2)])\r\n\r\n this.lastPoint = [this.afX(x2, y2), this.afY(x2, y2)];\r\n },\r\n bezierTo:function(x,y,x2,y2,x3,y3){\r\n this.ctx.bezierCurveTo(this.afX(x,y), this.afY(x,y), this.afX(x2,y2), this.afY(x2,y2), this.afX(x3,y3), this.afY(x3,y3));\r\n this.lastPoint = [this.afX(x3, y3), this.afY(x3, y3)];\r\n },\r\n moveTo:function(x,y){\r\n //this.ctx.moveTo(this.afX(x,y), this.afY(x,y));\r\n this.pathData = this.pathData.concat([\"M\", this.afX(x, y), this.afY(x, y)])\r\n this.lastPoint = [this.afX(x, y), this.afY(x, y)];\r\n },\r\n closePath:function(){\r\n //this.ctx.closePath();\r\n this.pathData = this.pathData.concat([\"Z\"])\r\n },\r\n fill:function(){\r\n //this.ctx.fill();\r\n let clipPath = \"\";\r\n if(this.clipPathId){\r\n clipPath = ' clip-path=\"url(#' + this.clipPathId + ')\" '\r\n }\r\n\r\n //this.svgData.push(' ')\r\n this.svgData.push(' ')\r\n },\r\n stroke:function(){\r\n //this.ctx.stroke();\r\n let clipPath = \"\";\r\n if(this.clipPathId){\r\n clipPath = ' clip-path=\"url(#' + this.clipPathId + ')\" '\r\n }\r\n this.svgData.push(' ')\r\n },\r\n clip:function(){\r\n //this.ctx.save();\r\n //this.ctx.clip();\r\n let id = \"clip-\" + Math.floor(Math.random()*1000)\r\n this.svgData.push(' ');\r\n this.clipPathId = id\r\n },\r\n resetClip:function(){\r\n //this.ctx.restore();\r\n this.clipPathId = null;\r\n },\r\n\r\n affine:function(m11, m12, m21, m22, dx, dy){this.ctx.save();this.ctx.transform(m11, m12, m21, m22, dx, dy);},\r\n resetAffine:function(){this.ctx.restore();},\r\n\r\n fillText:function(text){\r\n /*\r\n this.ctx.save();\r\n this.ctx.transform(\r\n this.affine.data[0][0], this.affine.data[1][0],\r\n this.affine.data[0][1], this.affine.data[1][1],\r\n this.affine.data[0][2], this.affine.data[1][2]\r\n );\r\n\r\n var m = this.ctx.measureText(text);\r\n this.ctx.fillText(text, -m.width / 2, 0);\r\n this.ctx.restore();\r\n */\r\n //let t = []\r\n //for(let i = 0; i < text.length; i ++){\r\n // t.push(\"\" + text.charCodeAt(i) + \";\");\r\n //}\r\n //console.log(\"fillText\", t)\r\n\r\n let fontNameWithQuote = \"'\" + this.fontName + \"'\"\r\n this.svgData.push('' +\r\n //t.join(\"\") +\r\n text + \r\n ' ');\r\n },\r\n strokeText:function(text){\r\n //this.ctx.save();\r\n //this.ctx.transform(\r\n // this.affine.data[0][0], this.affine.data[1][0],\r\n // this.affine.data[0][1], this.affine.data[1][1],\r\n // this.affine.data[0][2], this.affine.data[1][2]\r\n //);\r\n //var m = this.ctx.measureText(text);\r\n //this.ctx.strokeText(text, -m.width / 2, 0);\r\n //this.ctx.restore();\r\n let fontNameWithQuote = \"'\" + this.fontName + \"'\"\r\n this.svgData.push(\r\n '' +\r\n '' +\r\n text +\r\n ' ');\r\n },\r\n blur:function(s){this.ctx.shadowBlur = s * this.size /400;},\r\n bs:function(s){this.ctx.shadowColor = s;},\r\n fs:function(s){\r\n //this.ctx.fillStyle = s;\r\n this.fillStyle = s;\r\n },\r\n ss:function(s){\r\n //this.ctx.strokeStyle = s;\r\n this.strokeStyle = s;\r\n },\r\n dlw:function(s){this.ctx.lineWidth = this.affine.scale()* s/200;},\r\n lw:function(s){\r\n //this.ctx.lineWidth = s/200;\r\n this.lineWidth = s/200;\r\n },\r\n font:function(s){\r\n this.fonts.add(s);\r\n //this.ctx.font = \"12px '\"+s+\"'\";\r\n this.fontName = s\r\n console.log(\"FONT\", this.font)\r\n }, // todo: スペースがあれば削る?\r\n radialGrad:function(x0,y0,r0,x1,y1,r1){this.grad = this.ctx.createRadialGradient(this.afX(x0,y0),this.afY(x0,y0),r0,this.afX(x1,y1),this.afY(x1,y1),r1)}, // 楕円変形がデキないので辛い\r\n linearGrad:function(x0,y0,x1,y1){this.grad = this.ctx.createLinearGradient(this.afX(x0,y0),this.afY(x0,y0),this.afX(x1,y1), this.afY(x1,y1))},\r\n cs:function(pos, col){this.grad.addColorStop(pos,col);},\r\n fsGrad:function(){this.ctx.fillStyle = this.grad;},\r\n ssGrad:function(){this.ctx.strokeStyle = this.grad;},\r\n createImage:function(id,w, h){\r\n id = parseInt(id);\r\n w = parseInt(w);\r\n h = parseInt(h);\r\n this.patternCanv[id] = document.createElement('canvas');\r\n this.patternCanv[id].width = w;\r\n this.patternCanv[id].height = h;\r\n\r\n\r\n //console.log(\"create image \" + id + ' ' + this.patternCanv[id]);\r\n },\r\n setTarget:function(id){\r\n id = parseInt(id);\r\n if(id === 0){\r\n // デフォルトCanvasのコンテキストに戻す\r\n this.ctx = this.ctxTmp;\r\n }else{\r\n // デフォルトCanvasのコンテキストを待避\r\n if(this.ctxId === 0){\r\n this.ctxTmp = this.ctx;\r\n }\r\n //console.log(\"set target \" + id + ' ' + this.patternCanv[id]);\r\n this.ctx = this.patternCanv[id].getContext('2d');\r\n var size = this.patternCanv[id].width;\r\n this.ctx.setTransform(size/2 , 0, 0, size/2, size/2, size/2);\r\n this.ctx.clearRect(-1,-1,4,4);\r\n this.ctx.fillStyle = \"transparent\";\r\n this.ctx.strokeStyle = \"black\";\r\n this.ctx.lineWidth = 0.005;\r\n this.ctx.lineJoin = \"miter\";\r\n this.ctx.miterLimit = 10;\r\n this.ctx.textBaseline = \"middle\";\r\n this.ctx.font = \"18px '\"+ this.fontName +\"'\";\r\n }\r\n this.ctxId = id;\r\n },\r\n /*\r\n fsPattern:function(id, rep){\r\n id = parseInt(id);\r\n var pattern = this.ctx.createPattern(this.patternCanv[id], rep);\r\n this.ctx.fillStyle = pattern;\r\n },\r\n */\r\n drawImage:function(id){\r\n id = parseInt(id);\r\n this.ctx.save();\r\n this.ctx.transform(\r\n this.affine.data[0][0], this.affine.data[1][0],\r\n this.affine.data[0][1], this.affine.data[1][1],\r\n this.affine.data[0][2], this.affine.data[1][2]\r\n );\r\n this.ctx.drawImage(this.patternCanv[id], -this.patternCanv[id].width/2, -this.patternCanv[id].height/2);\r\n this.ctx.restore();\r\n },\r\n drawExtImage:function(url){\r\n this.ctx.save();\r\n this.scale(0.001, 0.001);\r\n this.ctx.transform(\r\n this.affine.data[0][0], this.affine.data[1][0],\r\n this.affine.data[0][1], this.affine.data[1][1],\r\n this.affine.data[0][2], this.affine.data[1][2]\r\n );\r\n var img = new Image();\r\n if(this.imgCache[url]){\r\n img = this.imgCache[url];\r\n }else{\r\n img.src = '../imgproxy.php?url=' + encodeURIComponent(url);\r\n this.imgCache[url] = img;\r\n }\r\n this.ctx.drawImage(img, -img.width/2, -img.height/2);\r\n this.ctx.restore();\r\n\r\n this.ctx.save();\r\n this.shift(0, img.height/2);\r\n this.strokeText(url);\r\n this.fillText(url);\r\n this.ctx.restore();\r\n\r\n },\r\n\r\n render: function(o, width,height){\r\n if(!height)height = width;\r\n var size = Math.max(width,height);\r\n var target;\r\n //var j;\r\n this.size = size;\r\n // 座標変換\r\n //this.ctx.setTransform(size/2 , 0, 0, size/2, width/2, height/2);\r\n //this.ctx.clearRect(-1,-1,4,4);\r\n //this.ctx.fillStyle = \"transparent\";\r\n //this.ctx.strokeStyle = \"black\";\r\n //this.ctx.lineWidth = 0.005;\r\n //this.ctx.lineJoin = \"miter\";\r\n //this.ctx.miterLimit = 10;\r\n //this.ctx.textBaseline = \"middle\";\r\n this.fontName = \"Sans-Serif\";\r\n //this.ctx.font = \"18px '\"+ this.fontName +\"'\";\r\n\r\n this.affine = new rb.Affine();\r\n this.stack = [];\r\n\r\n for(var i = 0; i < o.length; i ++){\r\n target = o[i];\r\n if(!o[i])continue;\r\n if(this[o[i][0]]){\r\n this[o[i][0]].apply(this, target.slice(1));\r\n }else{\r\n console.log(\"unknown method [\" + o[i][0] + \"]\");\r\n }\r\n }\r\n }\r\n};\r\nmodule.exports = {\r\n RendererSVG: RendererSVG,\r\n}\r\n"],"sourceRoot":""}