ただでさえぐちゃぐちゃのコードがインデント無しで展開されて見るのがつらいし、
指摘し続けるのは不毛だし、
C言語とかだと見出しドーン、見出しドーン、見出しドーンってなって、
いい加減イライラしてくるので、
技術者のサイトである矜持を以って、ユーザビリティの改善を図るのが寛容と考えるがいかがか?
良い方法が思いつかないのであれば、協力を惜しまない良き回答者も多かろうぞ。
そろそろポイントが貯まってきたので、有効活用させていただこうと存ずる。
##謝辞
おのおのがた、大儀であらせられた。かねてよりの見出しドーンを心苦しう思われておられる皆々の心情、相分かった。
また、自動差保御人の誤りをご懸念されるのも尤も。されど、失敗を恐れていては技術の進歩はありえぬ。技士の名折れと心得よ。
かくなる上は、城主寺尾守様に当評議御査収頂き、下々の声、何卒お聞き入れ頂くよう願い奉る次第。
最後に重ねて、皆の日々の勤勉に対し、謝辞を申し述ぶる。
####補足
いつも質問を根こそぎ削除され申すがため、此度こそはベストアンサーを選びとう御座る。
####例
老母を医者に送り迎えする傍ら、つらつらとコードなどを書いておった。
jQuery
1$(function() 2{ 3 const LINE_TYPE = { WORD: 0, CODE: 1, BLANK: 2, CODE_BLOCK: 3, FOREIGN: 4, COMMENT_START: 5, COMMENT_END: 6 }; 4 5 $("#confirm-button").on("click", function() 6 { 7 let content = $("#hoge").val(); 8 let lines = content.split("\n"); 9 let continually = 0; 10 let skip_code_block = false; 11 let start_code_block = false; 12 let start_comment_block = false; 13 14 for(let i = lines.length; i >= 0 ; i--) 15 { 16 let line_type = isCodeLine(lines[i], i); 17 18 switch(line_type) 19 { 20 case LINE_TYPE.FOREIGN: 21 if(!start_code_block) 22 { 23 lines[i] = "> " + lines[i]; 24 break; 25 } 26 27 case LINE_TYPE.COMMENT_START: 28 case LINE_TYPE.COMMENT_END: 29 if(line_type == LINE_TYPE.COMMENT_START) { start_comment_block = false; } 30 if(line_type == LINE_TYPE.COMMENT_END) { start_comment_block = true; } 31 32 case LINE_TYPE.BLANK: 33 if(!start_code_block){ break; } 34 35 case LINE_TYPE.CODE: 36 if(!skip_code_block) 37 { 38 continually++; 39 start_code_block = true; 40 } 41 break; 42 43 case LINE_TYPE.CODE_BLOCK: 44 skip_code_block != skip_code_block; 45 46 break; 47 48 case LINE_TYPE.WORD: 49 if(start_comment_block) 50 { 51 if(!skip_code_block) 52 { 53 continually++; 54 start_code_block = true; 55 } 56 break; 57 } 58 59 start_code_block = false; 60 if(continually < 5) { continue; } 61 62 // コードブロックでラップ 63 let target = i + 1; 64 lines.splice(target + continually, 0, "```\n"); 65 if(lines[target].trim() == "") { target++; } 66 lines.splice(target, 0, "```何のコードですか?\n"); 67 68 continually = 0; 69 70 break; 71 } 72 } 73 74 75 // 確認ウィンドウ表示 76 77 let html = parseMarkdown(lines); 78 79 let button = $("<button/>").attr("id", "submit-button").html("投稿する"); 80 let control = $("<div/>").addClass("controls").append(button); 81 let preview = $("<div/>").addClass("preview").append(html); 82 let outer = $("<div/>").addClass("shadow").append(preview).append(control); 83 84 $("body").append(outer); 85 $("input.code-tag").on("focus", function() 86 { 87 clearInterval(timer); 88 $(this).css("background-color", "#fff").css("opacity", 1); 89 }); 90 }); 91 92 function isCodeLine(line, i) 93 { 94 if(line === undefined) { return LINE_TYPE.WORD; } 95 if(line.trim().length == 0) { return LINE_TYPE.BLANK; } 96 97 if(line.trim().match(/^//.*$/)) { return LINE_TYPE.COMMENT_START; } 98 if(line.trim().match(/^/*.*$/)) { return LINE_TYPE.COMMENT_START; } 99 if(line.trim().match(/^*/.*$/)) { return LINE_TYPE.COMMENT_END; } 100 101 if(line.trim().match(/^#.+$/)) { return LINE_TYPE.COMMENT_START; } 102 103 if(line.trim().match(/^```.*$/)) { return LINE_TYPE.CODE_BLOCK; } // 欠落しておった 104 105 // erase string literal 106 line = line.replace(/"(.+)"/g, ""); 107 line = line.replace(/'(.+)'/g, ""); 108 109 let all_charactors = line.length; 110 var alpha_numerics = 0; 111 112 line.split("").forEach(function(value) 113 { 114 alpha_numerics += (value.match(/[a-zA-Z0-9 \"'`/#%&$.,:;<>()[]{}\t]/))? 1 : 0; 115 }); 116 117 let alpha_numeric_ratio = alpha_numerics / all_charactors; 118 119 if(isForeginLanguage(line, alpha_numeric_ratio)) { return LINE_TYPE.FOREIGN; } 120 if(alpha_numeric_ratio > 0.75) { return LINE_TYPE.CODE; } 121 122 return LINE_TYPE.WORD; 123 } 124 125 function isForeginLanguage(line, alpha_numeric_ratio) 126 { 127 if(alpha_numeric_ratio < 0.95) { return false; } 128 if(line.trim().match(/^.+[.,!?]$/)) { return true; } 129 if(line.length < 40) { return false; } 130 return false; 131 } 132 133 /////////////////////////////////////////////////// 134 // 135 // ここから適当 136 137 function parseMarkdown(lines) 138 { 139 let html = ""; 140 141 for(let i in lines) 142 { 143 lines[i] = lines[i].replace(/</g, "<"); 144 lines[i] = lines[i].replace(/>/g, ">"); 145 if(lines[i].trim().match(/^> .+$/)){ lines[i] = lines[i].replace(/^> (.+)$/ ,"<blockquote>$1</blockquote>"); } 146 html += lines[i] + "\n"; 147 } 148 149 let result = html.replace(/```(.*)\n([^`]+)```/g, "<br><input type='text' class='code-tag' placeholder='$1'></span><pre>$2</pre>"); 150 151 return result; 152 } 153 154 let timer; 155 let angle = 0; 156 157 timer = setInterval(function() 158 { 159 let radian = angle * (Math.PI / 180) / 2; 160 angle += 20; 161 if(angle >= 180) { angle -= 180; } 162 163 $("input.code-tag").css("opacity", Math.sin(radian) + 0.5); 164 165 }, 150); 166});
HTML
1<!DOCTYPE html> 2<html> 3 <head> 4 <title>TODO supply a title</title> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 8 <script src="./markdown.js"></script> 9<style> 10 11 html { 12 height: 100%; 13 } 14 15 body { 16 height: 100%; 17 margin: 0; 18 } 19 20 textarea { 21 width: 640px; 22 height: 640px; 23 margin: 0px; 24 } 25 26 div.pane { 27 float: left; 28 margin: 4px; 29 padding: 0px; 30 width: 640px; 31 height: 640px; 32 border: solid 1px #efefef; 33 } 34 35 div.shadow { 36 box-sizing: border-box; 37 position: absolute; 38 width: 100%; 39 height: 100%; 40 top: 0px; 41 left: 0px; 42 background-color: rgba(0,0,0, 0.75); 43 text-align: center; 44 } 45 46 div.controls { 47 clear: both; 48 box-sizing: border-box; 49 padding: 12px 4px; 50 text-align: center; 51 } 52 53 div.preview { 54 display: inline-block; 55 text-align: left; 56 width: 95%; 57 margin-top: 20px; 58 padding: 10px; 59 left: 10px; 60 top: 10px; 61 background-color: #fefefe; 62 } 63 64 pre { 65 box-sizing: border-box; 66 border: solid 1px #efefef; 67 margin: 5px 10px 20px 10px; 68 padding: 10px; 69 font-weight: bold; 70 } 71 72 blockquote { 73 border-left: solid 4px #aaa; 74 padding-left: 10px; 75 } 76 77 input.code-tag { 78 clear: both; 79 margin-top: 20px; 80 margin-left: 10px; 81 background-color: #ff9999; 82 } 83 84</style> 85 </head> 86 <body> 87 <div id="content-pane" class="pane"> 88 <textarea id="hoge" name="hoge" class="hoge"> 89以下のコードが全く動かないんですが、なんとかしてください。 90 91#include <studio.h> 92#include <stdlib.h> 93#include <math.h> 94 95/* 96 * ここからがメイン関数です。 97 */ 98int main() 99{ 100 // メッセージを出力する 101 printf("Hello, world %d", add(2, 3)); 102} 103 104/* 105 * かさーん。 106 */ 107int add(int a, int b) 108{ 109 return a + b; 110} 111 112The following error message appears. It seems to me like a bug. Are there any ways to fix this? The version I'm using is PHP 5.4. 113というエラーメッセージが出ます。 114 115もう、全然わかんないです。゚(゚´Д`゚)゚。 116 </textarea> 117 </div> 118 119 <div class="controls"> 120 <button type="button" id="confirm-button">質問文を確認して投稿する</button> 121 </div> 122 123 </body> 124</html>
寛容じゃなく肝要では。※以前誤字を指摘いただいたので、敢えて。
ほんとだし。ずっと勘違いしておった。
うむ、飽きたのでコードを晒したが、崩壊しておる。
なぜかインデントが崩れる。解せぬ…。
回答10件
あなたの回答
tips
プレビュー