Skip to content

Instantly share code, notes, and snippets.

@coord-e
Last active December 19, 2017 12:40
Show Gist options
  • Save coord-e/beefcdad9a513586124bd0a143f4c273 to your computer and use it in GitHub Desktop.
Save coord-e/beefcdad9a513586124bd0a143f4c273 to your computer and use it in GitHub Desktop.
cart cart.cpp pikachu.png -r 2 -c 1 -d > pika.cpp
#include<iostream>
#include<numeric>
#include<algorithm>
#include<sstream>
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<args.hxx>
#include<clang-c/Index.h>
#define ch ArgumentParser
#define bj CXFile
#define m CXGlobalOpt_None
#define ba CXToken
#define bv CXToken_Comment
#define bw CXToken_Punctuation
#define di Exception
#define cj HelpFlag
#define cx ParseCLI
#define cz ParseError
#define ck Positional
#define dh THRESH_BINARY
#define ce Traits
#define co ValueFlag
#define cq arg_cols
#define ct arg_define_shorten
#define cu arg_desth
#define cm arg_path
#define cp arg_rows
#define cl arg_source
#define cs arg_threshold
#define cw arg_verbose
#define ci argparser
#define dk assert
#define cf basic_ostream
#define ds begin
#define o c_str
#define cy catch
#define bp cbegin
#define l clang_CXIndex_setGlobalOptions
#define k clang_createIndex
#define n clang_createTranslationUnitFromSourceFile
#define ca clang_disposeIndex
#define bx clang_disposeString
#define by clang_disposeTokens
#define bz clang_disposeTranslationUnit
#define bo clang_getCString
#define z clang_getCursorExtent
#define bm clang_getSpellingLocation
#define bu clang_getTokenKind
#define bn clang_getTokenLocation
#define bi clang_getTokenSpelling
#define u clang_getTranslationUnitCursor
#define be clang_tokenize
#define cd class
#define bk column
#define g const
#define dz count
#define dx count_if
#define s cursor
#define db define_shorten
#define dr defmap
#define da desth
#define cr double
#define dq empty
#define h filepath
#define bt first
#define dj floor
#define de imread
#define dl imshow
#define j index
#define eb insert
#define ed istreambuf_iterator
#define bq length
#define bf macro_holder
#define r nullptr
#define bd num_tokens
#define bl offset
#define cg operator
#define ec ostream_iterator
#define ee ostreambuf_iterator
#define dw part_image
#define bs push_back
#define w range
#define dd raw_image
#define dt remove_if
#define dp resize
#define dv result
#define cb return
#define br second
#define q sizeof
#define bh spelling
#define dn src_image
#define d string
#define du stringstream
#define cc template
#define df th_image
#define dg threshold
#define bg token
#define f tokenize
#define bb tokens
#define dy total
#define bc unsigned
#define a vector
#define dc verbose
#define dm waitKey
#define ea while
std ::a <std
::d >f (g std :: d &h ){std ::
a <std ::d >dest ;auto g j =k (1 ,
0 );l (j ,m );g char *args []={"-""X""c""l"
"a""n""g","-""c" "c""1"};auto unit =n (j ,h .o (),q (
args )/q (char * ),args ,0 ,r );if (unit !=NULL ){
auto g s =u (unit ) ;auto g w =z (s );ba * bb =r ;bc int bd =0 ;be (unit ,
w ,&bb ,&bd );std ::pair <std ::d ,int >bf ={"" ,-1 };for (int
i =0 ;i <bd ;++ i ){auto g &bg =bb [i ]; auto g bh =bi (unit ,bg );bj file ;bc
line ,bk ,bl ;bm (bn ( unit ,bg ),&file ,&line , &bk ,&bl );std ::d thes =bo (bh );if
(*std ::bp (thes )=='"' &&*(std ::cend (thes )-1 )=='"' &&thes .bq ()!=2 &&
bf .br ==-1 ){auto it =std ::bp (thes )+1 ;auto end =std ::cend (thes )-1 ;for
(;it !=end ;it ++){if (*it =='\\' ){it ++; dest .bs (std ::d ("\"""\\")+*it +"\""
);}else dest .bs (std ::d ("\"")+*it +"\"");}}else if (*std ::bp (thes )=='#' &&bf .br ==-1 ){bf .bt ="#";bf .br =line
;}else if (*std ::bp (thes )=='#' &&bf .br !=- 1 &&bf .br !=line ){dest .bs (bf .bt +'\n' );bf .bt ="#";bf .br =line ;}else {if (bf .br !=
-1 ){if (bf .br ==line ){bf .bt +=thes ;thes ="" ;} else {dest .bs (bf .bt );bf .bt ="" ;bf .br = -1 ;}}auto g kind =bu (bg );if (kind !=bv ){
if (kind !=bw )dest .bs (thes +" ");else dest .bs (thes );}}bx (bh );}by (unit ,bb ,bd );bz ( unit );}else {std ::cerr <<"F""a""i""l""e"
"d"" ""t""o"" ""t""o""k""e""n""i""z""e"":"" ""\""<<h <<"\""<<std ::endl ;}ca ( j );cb dest ;}cc <cd Char ,cd ce ,cd T >std ::cf <Char ,ce
>&cg <<(std ::cf <Char ,ce >&os , g std ::a <T >&vec ){os <<'[' ;for (auto g &v :vec )os <<'"' <<v <<"\""","" ";os <<']'
;cb os ;}int main (int argc , char **argv ){args ::ch ci ("c""a""r""t" ":"" ""C""o""n""v""e""r""t"" ""a"" ""c""/""c""+"
"+"" ""c""o""d""e"" ""t""o"" ""a""s" "c""i""i"" ""a""r""t" );args ::cj help (ci ,"h""e""l""p","P""r""i""n""t"" ""t""h"
"i""s"" ""h""e""l""p",{'h' , "h" "e""l""p"});args :: ck <std ::d >cl (ci ,"s""o""u""r""c""e","P""a""t""h"" "
"t""o"" ""c"" ""s""o""u""r""c" "e"" ""f""i""l""e"); args ::ck <std ::d >cm (ci ,"i""m""a""g""e","P""a""t""h"" "
"t" "o"" ""i""m""a""g""e"" ""f""i" "l""e");args ::co <int > cp (ci ,"r""o""w""s","N""u""m""b""e""r"" ""o""f"" ""r""o"
"w""s" " ""(""=""5"")",{'r' ,"r" "o""w""s"});args ::co <int >cq (ci ,"c""o""l""s","N""u""m""b""e""r"" ""o""f"" ""c"
"o" "l" "s"" ""(""=""5"")",{'c' ,"c" "o""l""s"});args ::co <cr >cs ( ci ,"t""h""r""e""s""h""o""l""d","t""h""r""e""s""h""o"
"l" "d"" ""(""=""1""5""0"")",{"t" "h"});args ::Flag ct (ci ,"S""h" "o""r""t""e""n"" ""u""s""i""n""g"" ""#""d""e""f""i"
"n" "e","U" "s""e"" ""#""d""e""f""i""n""e" " ""t" "o"" ""s""h""o" "r""t""e""n"" ""t""o""k""e""n""s",{'d' });args
:: co <int >cu (ci ,"d""e""f""i""n""e"" ""t""h" "r""e""s" "h""o""l""d","M" "i""n""i""m""u""m"" ""l""e""n""g""t""h"" ""o""f"
" " "t""o""k""e""n"" ""(""=""5"")",{"d""e" "f""t""h"}) ;args ::Flag cw ( ci ,"v""e""r""b""o""s""e","P""r""i""n""t"" ""v""e"
"r" "b""o""s""e"" ""o""u" "t""p""u""t"" " "a""n""d"" ""s""h""o""w"" ""i" "m""a""g""e""s"" ""i""n"" ""p""r""o""c""e""s"
"s",{'v' , "v""e" "r""b""o""s""e"});try {ci .cx (argc ,argv ); }cy (args ::Help ){std ::cout <<ci ;cb 0 ;}cy (args
::cz e ){std ::cerr <<e .what ()<<std :: endl ;std ::cerr <<ci ;cb -1 ;}if (!cm ){std ::cerr <<"S""p""e"
"c" "i""f""y"" ""a" " ""p""a""t""h"" ""t""o"" ""i""m""a""g""e"" ""f" "i""l""e""."<<std ::endl ;std ::cerr <<ci
;cb - 1 ;}if (!cl ) {std ::cerr <<"S""p""e""c""i""f""y"" ""a"" ""p" "a""t""h"" ""t""o"" ""i""m""a""g""e"" "
"f" "i""l""e""."<< std ::endl ;std ::cerr <<ci ; cb -1 ;}auto g rows =cp ?args ::get (cp ):5 ;auto g cols
=cq ? args ::get (cq ) :5 ;auto g path =args ::get (cm );auto g th =cs ?args ::get (cs ):150 ;auto g da =cu ?args
::get (cu ):5 ;bool g db =ct ;bool g dc =cw ; auto dd =cv ::de (path ,0 );if ( !dd .data ){std ::cerr <<"F"
"a""i""l""e""d"" ""t" "o"" ""l""o""a" "d"" " "s""u""p""p""l""i""e""d" " ""i""m""a""g""e"":"" "
<<path <<std ::endl ;cb -1 ;}cv ::Mat df ;try {cv ::dg (dd ,df ,th ,255 ,cv ::dh );}cy (cv ::di
&ex ){std ::cerr << "F""a" "i""l""e""d"" ""t""o"" ""a""p""p""l""y"" ""t""h""r" "e""s""h""o""l""d"
"." <<std ::endl ;std ::cerr <<ex .what ()<<std ::endl ;cb -1 ;}int cn =std :: dj (df .cols /cols
) *cols ;int rn =std ::dj ( df .rows /rows )*rows ;dk (!(rn %rows ||cn %cols )); if (dc ){std
::cerr <<"R""e""s""i" "z""e""d"" ""i""m""a""g""e"":"" "<<rn <<'x' <<cn <<std ::endl ;cv
::dl ("t""h""r""e""s""h""o""l""d",df );cv ::dm (0 );}cv ::Mat dn ;try {cv :: dp (df ,dn ,cv
::Size (cn ,rn ));}cy (cv ::di &ex ){std ::cerr <<"F""a" "i""l""e""d"" ""t" "o"" ""r"
"e""s""i""z""e"" ""i""m""a""g""e""."<<std ::endl ; std :: cerr <<ex .what ()<<std
::endl ;cb -1 ;}auto bb =f (args ::get (cl ));if ( bb . dq () ) {std ::cerr << "F""a""i"
"l""e""d"" ""t""o"" ""t""o""k""e""n""i""z""e" "."<<std :: endl ;cb -1 ; }if (dc )std
::cerr <<bb <<std ::endl ;std ::a <std ::d >prep {}; std ::map <std ::d ,std ::d >dr {};auto it
=std ::ds (bb );auto last =std ::dt (bb .ds (),bb .end (),[& prep ](auto &&x ){bool c =*std ::bp (x )
=='#' ;if (c )prep .bs (x );cb c ;});int itr =0 ;std :: du dv ;for (int y = 0 ;y <dn .rows ;y +=rows ){for
(int x =0 ;x <dn .cols ;x +=cols ){auto dw =dn (cv ::Rect (x ,y ,cols , rows ) );int b =std :: dx (dw .ds <bc char >()
,dw .end <bc char >(),[](auto x )->bool {cb x ;});if (b >dw .dy ()/2 ) {if (dc )std ::cerr <<"#";if (it ==last ){dv <<"/""/"
;x +=cols *2 ;}else {if (*std ::bp (*it )=='#' ){dv <<'\n' <<*it << '\n' ;} else if (it ->bq ()>da &&*it ->ds ()!='"' &&*
it ->end ()!='"' &&db ){if (!dr .dz (*it )){std ::d key ;do {int p =itr ++;if (! p )key ="a";else {int i ; char t [64 ]={}
;for (i =62 ;p ;--i ){t [i ]=p %26 +'a' ;p /=26 ;}key =std ::d ( t +i +1 );}if (*(std ::cend (* it )-1 )==' '
)key +=" ";}ea (std ::find (bb .ds (),bb .end (),key )!=bb .end ());dv <<key ;dr .eb ({*it ,key });}else {dv <<dr [* it ];}}else
{dv <<*it ;x +=it ->bq ()*cols ;}it ++;}}else {dv <<" ";if (dc )std ::cerr << " ";}}dv <<std ::endl ;if (dc )std :: cerr <<std
::endl ;}if (it !=last ){std ::copy (it ,last ,std ::ec <std ::d >(dv ));}std ::copy (prep .ds (),prep .end (), std ::ec
<std ::d >(std ::cout ));std ::cout <<std ::endl ;for (auto g &p :dr ){std :: cout <<"#""d""e""f""i""n""e"" "<<p .br <<" "
<<p .bt <<std ::endl ;}std ::copy (std ::ed <char >(dv ),std ::ed <char >(),std ::ee <char >(std ::cout ));cb 0 ; }
////////////// //////////////////////////////////////////////////////////////////////// //
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////////////////////////// //////////////////////////////
//////////////////// ////////////////////////
//////////////// //////////////////
////////// // // //
////////
//// //////////
//// // // //////
// // // // // //
//// // ////////
////// ////////
// ////
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment